用于服务端和客户端建立TCP连接
连接建立后,通过使用 I/O 流在进行通信,每一个socket都有一个输出流和一个输入流,客户端的输出流连接到服务器端的输入流,而客户端的输入流连接到服务器端的输出流。
模拟客户端:
//GreetingClient.java
import java.net.*;
import java.io.*;
public class GreetingClient
{
public static void main(String [] args)
{
String serverName = args[0];
int port = Integer.parseInt(args[1]);
try
{
//新建Socket客户端对象
System.out.println("connect:" + serverName + ",port:" + port);
Socket client = new Socket(serverName, port);
System.out.println("RemoteSocketAddress:" + client.getRemoteSocketAddress());
//给服务器发消息
DataOutputStream out = new DataOutputStream(client.getOutputStream());
out.writeUTF("Hello Server!");
//获取来自服务器的消息
DataInputStream in = new DataInputStream(client.getInputStream());
System.out.println(in.readUTF());
client.close();
}catch(IOException e)
{
e.printStackTrace();
}
}
}
模拟服务端:
//GreetingServer.java
import java.net.*;
import java.io.*;
public class GreetingServer extends Thread
{
private ServerSocket serverSocket;
public GreetingServer(int port) throws IOException
{
serverSocket = new ServerSocket(port);
serverSocket.setSoTimeout(20000);
}
public void run()
{
while(true)
{
try
{
//服务端调用serverSocket.accept()方法,返回服务器上一个新的 socket 引用
//,该 socket 连接到客户端的 socket。
System.out.println("waiting"+" port:"+serverSocket.getLocalPort());
Socket server = serverSocket.accept();
System.out.println("remote address: "+server.getRemoteSocketAddress());
//获取来自客户端的消息
DataInputStream in = new DataInputStream(server.getInputStream());
System.out.println(in.readUTF());
//给客户端发消息
DataOutputStream out = new DataOutputStream(server.getOutputStream());
out.writeUTF("Hi,Client!");
server.close();
}catch(SocketTimeoutException s)
{
System.out.println("Socket timed out!");
break;
}catch(IOException e)
{
e.printStackTrace();
break;
}
}
}
public static void main(String [] args)
{
int port = Integer.parseInt(args[0]);
try
{
Thread t = new GreetingServer(port);
t.run();
}catch(IOException e)
{
e.printStackTrace();
}
}
}
编译以上两个 java 文件代码,并执行以下命令来启动服务,使用端口号为 8081:
javac GreetingServer.java
java GreetingServer 8081
新开一个命令窗口,执行以上命令来开启客户端:
javac GreetingClient.java
java GreetingClient localhost 8081