您的位置:首页 > 编程语言

基于udp的协议的 socket编程小例子

2015-10-28 14:11 369 查看
 开启接收端UdpRece,将 UdpSend.java 文件拷贝到c盘根目录下,在文件中去除包名,在命令行下运行:

C:\Users\lei>cd c:\

c:\>javac UdpSend.java

c:\>java UdpSend

直接上代码:

  可以将发送端的代码,改为通过广播地址来发送,达到群聊的目的。例如我的机器IP地址为:10.5.83.140。子网掩码为:255.255.255.128

则对应的主机地址为从10.5.83.129到10.5.83.254.广播地址为,主机位全部标识位1.则广播地址为,10.5.83.255

DatagramPacket dp=new DatagramPacket(data,data.length,InetAddress.getByName("10.5.83.255"),10000);
package udpDemo;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.net.SocketException;
import java.net.UnknownHostException;

/*通过udp传输方式,发送一段文字
* 思路:
* 1.建立udpsocket服务
* 2.提供数据,并将数据封装到数据包中
* 3.通过socket服务的发送功能将数据包发送出去
* 4. 关闭资源
* */
public class UdpSend {
public static void main(String[] args) throws IOException {
//1.建立udpsocket服务
DatagramSocket ds=new DatagramSocket(8888);// 从某个固定的端口发出
boolean flag=true;

//2.提供数据,并将数据封装到数据包中
BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
while(flag)
{
System.out.println("请输入文字:");
String line=br.readLine();
byte []data=line.getBytes();

DatagramPacket dp=new DatagramPacket(data,data.length,InetAddress.getByName("localhost"),10000);
// 3.通过socket服务的发送功能将数据包发送出去
ds.send(dp);
}
//4.关闭资源
ds.close();
}

}

package udpDemo;

import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.SocketException;

/*需求:
* 定义一个应用程序,用于接受并处理数据
* 1.定义udp的socket服务通常会监听一个特定的端口,方便于明确哪些数据过来。由该应用程序处理
* 2.  定义一个数据包,因为要存储接受到字节数据。
*   因为数据包对象中有更多功能可以提取字节数据中的不同数据信息
* 3.通过socket服务的recevie方法将收到的数据存储到一已定义好的数据包中
* 4.通过数据包中的特有功能,将不同的数据提取出来,并打印到控制台上。
* 5.关闭资源
* */
public class UdpRece {
public static void main(String[] args) throws IOException {
//1.定义udp的socket服务,通常会监听一个特定的端口
DatagramSocket ds=new DatagramSocket(10000);
// * 2.  定义一个数据包,因为要存储接受到字节数据。
byte []buf=new  byte[1024];
DatagramPacket dp=new DatagramPacket(buf,0,buf.length);
boolean flag=true;
while(flag){
//3.通过socket服务的recevie方法将收到的数据存储到一已定义好的数据包中
ds.receive(dp);
//4.通过数据包中的特有功能,将不同的数据提取出来,并打印到控制台上。
String ip=dp.getAddress().getHostAddress();
String  data=new String(dp.getData(),0,dp.getLength());
int port =dp.getPort();
System.out.println("服务器端收到,接受到发送的ip:"+ip+",端口:"+port+",数据:"+data);
}
//5.关闭资源
ds.close();

}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: