一、前言
Java套接字编程用于不同JRE上运行的应用程序之间进行通信,可以是面向连接或无连接的。Socket类和ServerSocket类用于面向连接的套接字编程,DatagramSocket类和DatagramPacket类用于无连接的套接字编程。我们需要根据服务器IP地址和端口号来区分套接字。Socket类用于客户端和服务器之间的通信,我们可以读取和写入消息。ServerSocket类用于服务器端。
二、方法介绍
Socket类
方法 | 描述 |
getInputStream() | 返回此套接字的InputStream |
getOutputStream() | 返回此套接字的OutputStream |
close() | 关闭这个套接字 |
ServerSocket类
方法 | 描述 |
accept() | 返回套接字并在服务器和客户端之间建立连接 |
close() | 关闭服务器套接字 |
三、单向通信
服务端
package learn;
import java.io.DataInputStream;
import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;
/**
* @author qx
* @date 2024/1/18
* @des Socket服务端
*/
public class MyServer {
public static void main(String[] args) throws IOException {
// 建立连接 用于客户端和服务端之间的通信
ServerSocket serverSocket = new ServerSocket(8888);
Socket socket = serverSocket.accept();
DataInputStream dis = new DataInputStream(socket.getInputStream());
String data = dis.readUTF();
System.out.println("message=" + data);
serverSocket.close();
}
}
客户端
package learn;
import java.io.DataOutputStream;
import java.io.IOException;
import java.net.Socket;
/**
* @author qx
* @date 2024/1/18
* @des Socket客户端
*/
public class MyClient {
public static void main(String[] args) throws IOException {
// 连接服务端
Socket socket = new Socket("localhost", 8888);
DataOutputStream dos = new DataOutputStream(socket.getOutputStream());
// 发送数据
dos.writeUTF("hello world");
dos.flush();
dos.close();
}
}
我们先启动服务端接收来着客户端的数据,然后启动客户端发送数据。
然后启动客户端
最后我们在服务端的控制台接收到来着客户端发送的数据。
四、双向通信
具体的流程是客户端向服务端写入数据,服务端接收并打印该数据,然后向客户端写入数据,客户端接收数据并打印该数据。
服务端
package learn;
import java.io.*;
import java.net.ServerSocket;
import java.net.Socket;
/**
* @author qx
* @date 2024/1/18
* @des Socket服务端
*/
public class MyServer {
public static void main(String[] args) throws IOException {
// 建立连接 用于客户端和服务端之间的通信
ServerSocket serverSocket = new ServerSocket(8888);
Socket socket = serverSocket.accept();
DataInputStream dis = new DataInputStream(socket.getInputStream());
DataOutputStream dos = new DataOutputStream(socket.getOutputStream());
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String str = "", str2 = "";
while (!"stop".equals(str)) {
str = dis.readUTF();
System.out.println("client say:" + str);
str2 = br.readLine();
dos.writeUTF(str2);
dos.flush();
}
dis.close();
socket.close();
serverSocket.close();
}
}
客户端
package learn;
import java.io.*;
import java.net.Socket;
/**
* @author qx
* @date 2024/1/18
* @des Socket客户端
*/
public class MyClient {
public static void main(String[] args) throws IOException {
// 连接服务端
Socket socket = new Socket("localhost", 8888);
DataOutputStream dos = new DataOutputStream(socket.getOutputStream());
DataInputStream dis = new DataInputStream(socket.getInputStream());
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String str = "", str1 = "";
while (!"stop".equals(str)) {
str1 = br.readLine();
dos.writeUTF(str1);
dos.flush();
str = dis.readUTF();
System.out.println("server says:" + str);
}
dos.close();
socket.close();
}
}
我们和之前一样先启动服务端接收数据,然后启动客户端。在客户端输入要发送的消息。
服务端接收到来着客户端的消息。
然后服务端输入并发送消息给客户端。
客户端接收到服务端的消息并打印。
结束通信:
客户端输入stop结束通信。
服务端接收到stop消息,并发送stop消息,停止服务端。
最后客户端接收到stop消息,停止客户端。
标签:Java,Socket,编程,socket,import,new,接字,服务端,客户端 From: https://blog.51cto.com/u_13312531/9569866