首先我们先创建一个服务端,共分为四步曲:
- 创建一个服务端
- 等待一个客户端的连接
- 处理客户端发送过来的数据
- 关闭服务端
代码当中给出了详细的信息:
import java.net.*;
import java.io.*;
public class Server {
public static void main(String[] args) throws Exception {
//1. 创建一个服务端
ServerSocket server = createServer();
//2. 等待一个客户端的连接
Socket client = waitConnect(server);
//3. 处理客户端发送过来的数据
handleData(client);
//4. 关闭服务端
closeServer(server);
}
//实际上就是new了一个ServerSocket对象,参数为端口号(也可以改为其它的,比如9100),一会客户端会根据这个端口号+ip的方式来连接
static ServerSocket createServer() throws Exception {
return new ServerSocket(9000);
}
//调用accept方法来监听客户端的连接,这是一个阻塞方法,也就是说如果客户端一直不连接,这里就会一直等待
static Socket waitConnect(ServerSocket server) throws Exception {
return server.accept();
}
//跟客户端建立连接之后就好办了,可以根据你的需要处理一些东西,这里只是把客户端发送的数据打印出来,也可以换成你自己的逻辑
static void handleData(Socket client) throws Exception {
InputStream in = client.getInputStream();
ByteArrayOutputStream out = new ByteArrayOutputStream();
byte[] buffer = new byte[1024];
int len;
//read方法是阻塞方法,这就确保了如果客户端要发送一些数据,服务端总是能在客户端发送完了所有的数据之后,再获得客户端发送过来的数据,具体不再赘述
while ((len = in.read(buffer)) != -1)
out.write(buffer, 0, len);
System.out.println(out.toString());
}
//最后就是关闭服务端
static void closeServer(ServerSocket server) throws Exception {
server.close();
}
}
然后我们再创建一个客户端,共分为三步曲:
- 创建一个客户端(也就连接了一个服务端)
- 给服务端发送一些数据
- 关闭客户端
代码当中给出了详细的信息:
import java.net.*;
import java.io.*;
public class Client {
public static void main(String[] args) throws Exception {
//1. 创建一个客户端(也就连接了一个服务端)
Socket client = createClient();
//2. 给服务端发送一些数据
sendData(client);
//3. 关闭客户端
closeClient(client);
}
//实际上就是new了一个Socket对象,第一个参数是ip地址,127.0.0.1代表本机地址,端口号也就是服务端指定的那个端口号了,当创建了这个对象之后实际上也就连接上了服务端
static Socket createClient() throws Exception {
return new Socket("127.0.0.1", 9000);
}
//可以根据你自己的需求,写一些逻辑,这里只是给服务端发送了一些数据
static void sendData(Socket client) throws Exception {
PrintWriter out = new PrintWriter(client.getOutputStream());
out.println("Hello, server!");
out.close();
}
//关闭客户端
static void closeClient(Socket client) throws Exception {
client.close();
}
}
注意:要先运行服务端,然后再运行客户端