在前面的文章中,我们介绍过什么是IP,TCP协议,UDP协议,以及网络的基本构成,那么接下来,我们将用java中的socket套接字实现一个简单的TCP网络编程。

创建客户端

1
2
3
4
5
6
7
8
import java.net.Socket;

public class TcpClient {
public static void main(String[] args) throws Exception{
// * 1 创建客户端套接字,并指定服务器的地址和端口号
Socket socket=new Socket("192.168.0.103", 6666);//端口号可指定0-65535任意一个
}
}

这里采用IO流进行简单的字节传输

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20

import java.io.BufferedWriter;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.net.Socket;

public class TcpClient {
public static void main(String[] args) throws Exception{
// * 1 创建客户端套接字,并指定服务器的地址和端口号
Socket socket=new Socket("192.168.0.103", 6666);
// * 2 获取输出流,发送数据给服务器
OutputStream os=socket.getOutputStream();
BufferedWriter bw=new BufferedWriter(new OutputStreamWriter(os,"utf-8"));
bw.write("test");
// * 3 获取输入流,读取服务器回复的数据[可选]
// * 4 关闭释放资源
bw.close();
socket.close();
}
}

创建服务端

这里采用ServerSocket进行创建

1
2
3
4
5
6
7
8
9
10
public class TcpServer {
public static void main(String[] args) throws Exception{
// * 1 创建ServerSocket 并指定端口号
ServerSocket listener=new ServerSocket(6666);//此处需与客户端端口号一致
// * 2 调用accept(),接收客户端请求,阻塞方法(如果没有客户端请求,则阻塞)
// 这里可做文字提示,例如:
// System.out.println("服务器已启动);
Socket socket=listener.accept();
}
}

然后还是用输入流读取客户端数据

1
2
3
4
InputStream is=socket.getInputStream();
BufferedReader br=new BufferedReader(new InputStreamReader(is,"utf-8"));
String data=br.readLine();
System.out.println("客户发送:"+data);

如果有兴趣,可以再发个数据回去,这里就不做演示了,代码大致相同 最后释放资源,整体代码如下

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
import java.io.BufferedReader;
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 Exception{
// * 1 创建ServerSocket 并指定端口号
ServerSocket listener=new ServerSocket(6666);
// * 2 调用accept(),接收客户端请求,阻塞方法(如果没有客户端请求,则阻塞)
System.out.println("服务器已启动...");
Socket socket=listener.accept();
// * 3 获取输入流,读取客户端发送的数据
InputStream is=socket.getInputStream();
BufferedReader br=new BufferedReader(new InputStreamReader(is,"utf-8"));
String data=br.readLine();
System.out.println("客户发送:"+data);
// * 4 获取输出流,发送数据给客户端[可选]
// * 5 关闭释放资源
br.close();
socket.close();
listener.close();
}
}

注意事项

1.一定要先启动服务端再启动客户端,否则会报java.net.SocketException错误 2.记得用完要关 3.可适当做些文字提示
以上即为TCP案例演示