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

 开启接收端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();
        	 
		}
}

你可能感兴趣的:(基于udp的协议的 socket编程小例子)