Java UDP 网络编程


地址:http://blog.csdn.net/wintys/article/details/3525643/


  1. /**
  2.  *UDPServer
  3.  *@author Winty wintys@gmail.com
  4.  *@version 2008-12-15
  5.  */
  6. import java.io.*;
  7. import java.net.*;
  8. class UDPServer{
  9.     public static void main(String[] args)throws IOException{
  10.         DatagramSocket  server = new DatagramSocket(5050);
  11.         byte[] recvBuf = new byte[100];
  12.         DatagramPacket recvPacket 
  13.             = new DatagramPacket(recvBuf , recvBuf.length);
  14.         server.receive(recvPacket);
  15.         String recvStr = new String(recvPacket.getData() , 0 , recvPacket.getLength());
  16.         System.out.println("Hello World!" + recvStr);
  17.         int port = recvPacket.getPort();
  18.         InetAddress addr = recvPacket.getAddress();
  19.         String sendStr = "Hello ! I'm Server";
  20.         byte[] sendBuf;
  21.         sendBuf = sendStr.getBytes();
  22.         DatagramPacket sendPacket 
  23.             = new DatagramPacket(sendBuf , sendBuf.length , addr , port );
  24.         server.send(sendPacket);
  25.         server.close();
  26.     }
  27. }

  1. /**
  2.  *UDPClient
  3.  *@author Winty wintys@gmail.com
  4.  *@version 2008-12-15
  5.  */
  6. import java.io.*;
  7. import java.net.*;
  8. class UDPClient{
  9.     public static void main(String[] args)throws IOException{
  10.         DatagramSocket client = new DatagramSocket();
  11.         
  12.         String sendStr = "Hello! I'm Client";
  13.         byte[] sendBuf;
  14.         sendBuf = sendStr.getBytes();
  15.         InetAddress addr = InetAddress.getByName("127.0.0.1");
  16.         int port = 5050;
  17.         DatagramPacket sendPacket 
  18.             = new DatagramPacket(sendBuf ,sendBuf.length , addr , port);
  19.         client.send(sendPacket);
  20.         byte[] recvBuf = new byte[100];
  21.         DatagramPacket recvPacket
  22.             = new DatagramPacket(recvBuf , recvBuf.length);
  23.         client.receive(recvPacket);
  24.         String recvStr = new String(recvPacket.getData() , 0 ,recvPacket.getLength());
  25.         System.out.println("收到:" + recvStr);
  26.         client.close();
  27.     }
  28. }

附件: 源程序
上面的代码只能发送和接受一次数据。
下面是我稍作修改后的代码,可以实现循环聊天:
服务器端:
public class Server {
    public static void main(String[] args) throws IOException {
       
    	while(true){
    		
    		DatagramSocket  server = new DatagramSocket(5050);
            byte[] recvBuf = new byte[100];
           
            DatagramPacket recvPacket 
                = new DatagramPacket(recvBuf , recvBuf.length);
            server.receive(recvPacket);
            
            String recvStr = new String(recvPacket.getData() , 0 , recvPacket.getLength());
            System.out.println("来之于客服端的数据: " + recvStr);
           
            int port = recvPacket.getPort();
            
            InetAddress addr = recvPacket.getAddress();
            
            BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

            String sendStr = br.readLine();
            
            byte[] sendBuf;
            sendBuf = sendStr.getBytes();
           
            DatagramPacket sendPacket 
                = new DatagramPacket(sendBuf , sendBuf.length , addr , port );
            
            server.send(sendPacket);
            server.close();
    	}
    	 
    }
}
客户端:
public class Client {
	 public static void main(String[] args)throws IOException{
	       
		 while(true){
			 try{
				 DatagramSocket client = new DatagramSocket();
			        
				  BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

		            String sendStr = br.readLine();
			       
			       
			        byte[] sendBuf;
			        sendBuf = sendStr.getBytes();
			        
			        InetAddress addr = InetAddress.getByName("127.0.0.1");
			        int port = 5050;
			        DatagramPacket sendPacket 
			            = new DatagramPacket(sendBuf ,sendBuf.length , addr , port);
			       
			        client.send(sendPacket);
			       
			        byte[] recvBuf = new byte[100];
			        
			        DatagramPacket recvPacket
			            = new DatagramPacket(recvBuf , recvBuf.length);
			       
			        client.receive(recvPacket);
			        String recvStr = new String(recvPacket.getData() , 0 ,recvPacket.getLength());
			        System.out.println("来之于服务器端的数据:" + recvStr);
			     
			        client.close();
			 }catch(IOException e){
			
			 }finally{
				 
			 }
			 
		 }
		  
	       
	    }
	
}


  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值