工具:IDEA2020
jdk 1.8
本文实现基于Socket类、ServerSocker类的TCP网络通信编程。
0.Socker类与ServerSocker类
(1)客户端
Socket类构造方法如下:
Socket(String host,int port) 创建流套接字并将其连接到指定主机上的指定接口
Socket(InetAddress address,int port) 创建流套字并将其连接到指定IP地址的指定端口
Socket类常用方法如下:
getInetAddress() 返回与此Socket对象关联的InetAddress
getInputStream() 返回与此Socket对象关联的InputStream
getOutStream() 返回与此Socket对象关联的OutputStream
(2)服务端
ServerSocket类构造方法如下:
ServerSocket() 无参构造方法,创建未绑定的服务器套接字
ServerSocket(int port) 有参构造方法,创建绑定到指定端口的服务器套接字
ServerSocket类常用方法如下:
accept() 监听要连接到此服务器套接字的客户端的Socket并接受它
getInetAddress() 返回此服务器套接字的本地地址
getLocalPort() 返回此服务器套接字正在监听的端口
setSoTimeout(int timeout) 设置带有指定超时时间。对accept()的调用将启用超时时间
一、创建TCP服务端
打开IDEA,点击File—>New—>Project

下面这里选择Java,然后右侧选择SDK版本,这里选择1.8版本

下一步输入Project name,这里 项目名称为 tcpServer,右下角选择“Finish”

创建的类名为TcpServer

参考代码如下:
import com.sun.corba.se.spi.orbutil.fsm.Input;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.ServerSocket;
import java.net.Socket;
public class TcpServer {
public static void main(String[] args) throws IOException {
int port = 8888; // 服务端监听的端口号
//创建服务端ServerSocket的对象并绑定指定端口
ServerSocket serverSocket =new ServerSocket(port);
//调用accept()方法,进行监听,接受客户端的连接请求
Socket clientSocket = serverSocket.accept();
System.out.println("客户端已连接: " + clientSocket.getInetAddress());
InputStream is = clientSocket.getInputStream();
InputStreamReader isr = new InputStreamReader(is);
BufferedReader bufferedReader = new BufferedReader(isr);
//循环读取数据
String str =bufferedReader.readLine();
//输出
System.out.println(str);
//关闭流和socket
bufferedReader.close();
clientSocket.close();
}
}
用网络调试工具,模拟客户端向服务端发送信息,效果如下:

服务端源代码:tcpServer.zip(访问密码: 8543): https://url47.ctfile.com/f/64055047-1506279991-25f874?p=8543
二、创建TCP客户端
重新创建一个新项目,名字为tcpClient,创建的实体类TcpClient
参考代码如下:
import java.io.*;
import java.net.Socket;
public class TcpClient {
public static void main(String[] args) throws IOException {
//创建客户端Socket对象,指定服务端IP地址和端口,并请求服务端连接
String ip ="127.0.0.1";
int port=8888;
Socket socket = new Socket(ip,port);
OutputStream os = socket.getOutputStream();
OutputStreamWriter osw = new OutputStreamWriter(os);
BufferedWriter bufferedWriter = new BufferedWriter(osw);
//要传输的数据;
String str="hello";
//向输出流中写入字符串
bufferedWriter.write(str);
//关闭流和socket
bufferedWriter.close();
socket.close();
}
}
先启动服务端,再启动客户端,效果如下:

客户端源代码下载:tcpClient.zip(访问密码: 4251): https://url47.ctfile.com/f/64055047-1506280960-6bcb98?p=4251