java.UDP通信(实现服务端与客户端简单的聊天)

要求:

编写两个java程序

一个程序为服务端,建立UDP服务端套接字。

另外一个程序为客户端,建立UDP客户端套接字。

这两个新程序可以互联,完成一个基于TCP/IP网络的文本聊天程序。

服务端程序:

import java.io.IOException;
import java.net.*;
import java.util.Scanner;
public class UDPSend {   
     void server() throws SocketException{
    	 System.out.println("   服务端");
        while (true) {
            try {            	
            	DatagramSocket  Socket = new DatagramSocket(7777);//创建一个发送消息的套接字    
            	System.out.println("服务端:");
                Scanner sc = new Scanner(System.in);
                String msg = sc.next();
                byte [] bytes = msg.getBytes();//将发送的内容转化为字节数组
                InetAddress ip = InetAddress.getByName("10.66.9.132");//接收内容的Ip地址              
                DatagramPacket Packet = new DatagramPacket(bytes,bytes.length,ip,9001); //创建要发送的数据包,然后用套接字发送        				
                Socket.send(Packet); //用套接字发送数据包              
				receiver(Socket);//调用receiver方法,接收客户端回馈的信息
				Socket.close();  //关闭套接字             
            } catch (SocketException e) {
                e.printStackTrace();
            } catch (UnknownHostException e) {
                e.printStackTrace();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
       

    }
     void receiver(DatagramSocket Socket) throws IOException{  //构建接收客户端信息的方法  	 
    	 byte[] byte01=new byte[2048];
         DatagramPacket data=new DatagramPacket(byte01,byte01.length);//创建包接收信息
         Socket.receive(data);//接收信息
         String re=new String(data.getData());//将接收的信息转换为String型
         System.out.println("客户端发的消息为:"+re);
     }


	public static void main(String[] args) throws SocketException{
	    UDPSend s = new UDPSend();       
	    s.server();
	   
	}
}	

客户端程序:

import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.net.SocketException;
import java.util.Scanner;
public class UDPReceive {    
     void client() throws SocketException{
        System.out.println("    客户端");                
        while (true) {
            try {  
            	DatagramSocket Socket= new DatagramSocket(9001,InetAddress.getByName("10.66.9.132")); //创建接收消息的套接字,端口和ip要与服务端指定的一致
                byte [] bytes = new byte[2048];              
               DatagramPacket Packet = new DatagramPacket(bytes,bytes.length); //创建一个数据包来接收消息         				
                Socket.receive(Packet);//接收数据包               
                String rec = new String(Packet.getData()) ;//将接收的信息转换为String
                System.out.println("服务端发送的消息为:"+rec);
                System.out.println("客户端发送消息:");
              

               Scanner sc=new Scanner(System.in);
               String sr=sc.next();
               byte[] byte01=sr.getBytes();         
               DatagramPacket data =new DatagramPacket(byte01,byte01.length,Packet.getSocketAddress());//创建发送信息的包,指定给发送者socketAddress(ip和指定端口 )           
               Socket.send(data);//发送数据包
               Socket.close();//关闭套接字
            } catch (SocketException e) {
                e.printStackTrace();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }    
    public static void main(String[] args) throws SocketException {
        UDPReceive r = new UDPReceive();              
                r.client();
       
    }
}

运行结果:

在这里插入图片描述
在这里插入图片描述

  • 4
    点赞
  • 30
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值