javaSE TCP, ServerSocket, Socket

1、TCP通信同UDP通信一样,都能实现两台计算机之间的通信,通信的两端都需要创建socket对象。

2、区别在于,UDP中只有发送端和接收端,不区分客户端与服务器端,计算机之间可以任意地发送数据。

3、而TCP通信是严格区分客户端与服务器端的,在通信时,必须先由客户端去连接服务器端才能实现通信,服务器端不可以主动连接客户端,并且服务器端程序需要事先启动,等待客户端的连接。

4、UDP主要关注接收端监听接收端的端口号;TCP主要关注服务器端的端口号


TCPServer.java(服务器端):

package cn.xxx.demo;

import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.InetAddress;
import java.net.ServerSocket;
import java.net.Socket;

/*
 *  实现TCP服务器程序
 *    服务器端套接字类: java.net.ServerSocket
 *    客户端套接字类: java.net.Socket
 *  构造方法:
 *    ServerSocket(int port) 传递端口号
 *  
 *  注意: 必须要通过accept()方法,获得客户端的套接字对象Socket
 */
public class TCPServer {
	public static void main(String[] args) throws IOException{
		ServerSocket server = new ServerSocket(8888); // 创建服务器端套接字,指定端口号
		Socket socket = server.accept();  // 通过accept()方法,获取客户端套接字。 会阻塞线程,直到获取到客户端连接的套接字。
		
		//通过客户端套接字socket,获取字节输入流;读取客户端发送来的数据
		InputStream in = socket.getInputStream();
		byte[] data = new byte[1024];
		int len = in.read(data);  // 从字节输入流中读取数据到字节数组中,返回读取长度
		System.out.println(new String(data,0,len));
		
		//通过客户端套接字socket,获取字节输出流;向客户端写数据
		OutputStream out = socket.getOutputStream();
		out.write("收到,谢谢".getBytes()); 
		
		InetAddress inet = socket.getLocalAddress(); // 通过客户端套接字,获取客户端IP对象
		
		socket.close();  // 关闭资源。  同时会关闭套接字中的输入、输出流
		server.close();  // 关闭资源
	}
}
TCPClient.java(客户端):
package cn.xxx.demo;

import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.Socket;

public class TCPClient {
	public static void main(String[] args)throws IOException {
		//创建Socket对象,连接服务器。 构造函数一执行,就会进行TCP连接(连接失败,抛异常)
		Socket socket = new Socket("127.0.0.1", 8888); // 创建客户端套接字,指定服务器地址和服务器端口号
		//通过客户端的套接字Socket,获取字节输出流,将数据写向服务器
		OutputStream out = socket.getOutputStream();
		out.write("服务器OK".getBytes());
		
		//通过客户端的套接字Socket,获取字节输入流,读取服务器端的数据
		InputStream in = socket.getInputStream();
		byte[] data = new byte[1024];
		int len = in.read(data);
		System.out.println(new String(data,0,len));
		
		socket.close();  // 关闭资源。 同时会关闭套接字中的输入、输出流
	}
}


猜你喜欢

转载自blog.csdn.net/houyanhua1/article/details/80795055