Socket之TCP和UDP协议通信

4 篇文章 0 订阅

一、定义简介:

    1. TCP是一个面向连接的、可靠的协议(transmission control protocol)

            专门设计用于在不可靠的因特网上提供可靠的、端到端的字节流通信的协议。它是一种面向连接的协议。TCP连接是字节流而非报文流。


    2. UDP是一个无连接,不可靠的协议(user datagram protocol )
            数据的发送方只负责将数据发送出去,数据的接受方只负责接受数据。发送方和接收方不会相互确认数据的传输是否成功。


    3. Socket编程:Socket客户/服务器程序开发

            所谓的客户/服务器,是一种在基于网络环境的分布处理过程中,使用基于连接的网络通信模型。该通信模型首先在客户机和服务器之间定义一套通信协议,并创建一Socket(套接字)类,利用这个类建立一条可靠的链接;然后,客户/服务器再在这条连接上可靠地传输数据。客户端发出请求,服务器监听来自客户机地请求,并为客户端        提供响应服务。这就是典型的“请求-应答”模式。


二、简单通信实践:直接上代码,可直接运行

    1. TCP通信,需要创建两个类,一个是客户端(Client),一个是服务器端(Server)

    (1)Client类:

public class Client {	
	public static void main (String [] args){
		//创建客户端对象
		System.out.println("客户端启动~");
		try {
			Socket socket=new Socket("127.0.0.1",23456);
			OutputStream out=socket.getOutputStream();	
			PrintWriter pw=new PrintWriter(out);
			System.out.println("客户端:");//客户端写入
			Scanner sc=new Scanner(System.in);
			pw.println(sc.nextLine());
			pw.flush();
			
			InputStream in=socket.getInputStream();//客户端接收
			InputStreamReader inr=new InputStreamReader(in);
			BufferedReader bf=new BufferedReader(inr);//字符读取
			String s=bf.readLine();
			System.out.println(s);

			socket.close();
			
		} catch (UnknownHostException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}

	}
}
    

    (2)Server类:

public class Server {
	public static void main(String [] args) throws IOException{
		//创建服务端接收
		System.out.println("服务端启动~");
		ServerSocket server=new ServerSocket(23456);
		Socket socket=server.accept();//接收客户端
		
		InputStream in=socket.getInputStream();//接收字节流数据
		InputStreamReader inr=new InputStreamReader(in);
		BufferedReader bf=new BufferedReader(inr);//字符流读取
		String s=bf.readLine();
		System.out.println(s);
    
	    OutputStream out=socket.getOutputStream();	
		PrintWriter pw=new PrintWriter(out);
		System.out.println("客户端:");//客户端写入
		Scanner sc=new Scanner(System.in);
		pw.println(sc.nextLine());//注意使用换行方法
		pw.flush();//可以释放资源也可以不释放资源,最后再关闭流

		server.close();
		socket.close();

	}

}

    2. UDP通信,也需要创建两个类,一个是客户端(UDP_Client),一个是服务端(UDP_Server)

    (1)UDP_Client类:

public class UDP_Client {
		public static void main(String [] args) throws SocketException, UnknownHostException{
			System.out.println("客户端启动~~");
			DatagramSocket socket=new DatagramSocket();//创建socket通道
			System.out.println("请输入发送信息:");
			Scanner sc=new Scanner(System.in);
			String s=sc.next();
			byte[]by=s.getBytes();
			
			DatagramPacket packet=new DatagramPacket(by, 0,by.length, //创建packet包
					InetAddress.getByName("127.0.0.1"), 10087);
			
			try {
				socket.send(packet);
			} catch (IOException e) {
				e.printStackTrace();
			}
			socket.close();
	}
}
    

    (2)UDP_Server类:

public class UDP_Server {
	public static void main(String [] args) throws SocketException{
		DatagramSocket socket = new DatagramSocket(10087);
		System.out.println("服务端启动~~");
		byte[]by=new byte[socket.getReceiveBufferSize()];//获取缓冲区长度
		DatagramPacket packet = new DatagramPacket(by, by.length);//创建数据包对象
		try {
			socket.receive(packet);
			String message=new String(by,0,by.length);
			System.out.println(message);
						
		} catch (IOException e) {
			e.printStackTrace();
		}
		socket.close();
	}

}

三、注意事项:

    1.TCP通信和UDP通信都是先启动服务端,然后再启动客户端,然后才可以进行通信;

    2. 以上的TCP通信和UDP通信分别属于不同的代码块,可按需复制需要的代码块;





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值