一些理论的东西,我在这里一概不提,我们先看例子程序,关于理论的部分,我会在后续的博客中会进行详细的说明。
首先我们来看一个socket的一个简单的hello world程序,
我们首先来完成第一个需求:
(1) 让客户端和服务器端建立起连接
那么我们必须要有一个客户端程序(TCPClient),一个服务器端程序(TCPServer),我们的项目结构如下:
代码思想: 编写socket程序和其他程序不一样,关于我们socket程序,服务端和客户端代码需要同时编写,但是运行的时候,必须先要运行服务器端代码,然后再运行客户端代码,这是因为客户端是请求的发起者,服务器端是请求的接受者,只有接受者是活跃的状态,请求发起才具有实际的意义。
package com.niepengfei.server;
import java.net.ServerSocket;
public class TCPServer {
public static void main(String[] args) throws Exception {
ServerSocket ss = new ServerSocket(6666);
Socket s = ss.accept();
System.out.println("A client connect.");
}
}
package com.niepengfei.client;
import java.net.Socket;
public class TCPClent {
public static void main(String[] args) throws Exception {
Socket s = new Socket("127.0.0.1", 6666);
}
}
以上代码的含义如下:
我们首先运行TCPServer:
再运行TCPClient,(请注意控制台)
(2) 现在客户端和服务器端已经建立起连接了,那么现在我们让客户端向服务器端传入一段字符串。
package com.niepengfei.client;
import java.io.DataOutputStream;
import java.io.OutputStream;
import java.net.Socket;
public class TCPClent {
public static void main(String[] args) throws Exception {
Socket s = new Socket("127.0.0.1", 6666);
OutputStream out = s.getOutputStream();
DataOutputStream dos = new DataOutputStream(out);
dos.writeUTF("hello server.");
dos.flush();
dos.close();
s.close();
}
}
package com.niepengfei.server;
import java.io.DataInputStream;
import java.io.InputStream;
import java.net.ServerSocket;
import java.net.Socket;
public class TCPServer {
public static void main(String[] args) throws Exception {
ServerSocket ss = new ServerSocket(6666);
while(true){
Socket s = ss.accept();
System.out.println("A client connect.");
InputStream input = s.getInputStream();
DataInputStream dai = new DataInputStream(input);
System.out.println(dai.readUTF());
}
}
}
运行服务器端:
运行客户端(注意控制台):