访问端代码
package socket;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.net.Socket;
import java.util.logging.SocketHandler;
public class ClientSocketDemo {
public static void main(String[] args) {
String serverName = "localhost";
int port = 8089;
try {
Socket client = new Socket(serverName, port);
//当客户端连接到服务端后,才会执行以下代码
System.out.println("客户端已连接到远程主机地址:"+client.getRemoteSocketAddress());
//向服务端发送消息
DataOutputStream dos = new DataOutputStream(client.getOutputStream());
dos.writeUTF("服务端你好,我是客户端,我的地址是: "+client.getLocalSocketAddress());
//接收来自服务端的消息
DataInputStream dis = new DataInputStream(client.getInputStream());
System.out.println("来自于服务端的消息:"+dis.readUTF());
client.close();
} catch (IOException e) {
e.printStackTrace();
return;
}
}
}
服务器监听代码
package socket;
import java.io.*;
import java.net.ServerSocket;
import java.net.Socket;
import java.net.SocketTimeoutException;
public class ServerSocketDemo extends Thread {
private ServerSocket serverSocket;
private int i = 1;
public ServerSocketDemo(int port) throws IOException {
serverSocket = new ServerSocket(port);
//设置20s内无客户端连接,则抛出SocketTimeoutException异常
serverSocket.setSoTimeout(20000);
}
public void run(){
while(true) {
System.out.println("服务端第"+i+"次启动中...对应的端口号为:"+ serverSocket.getLocalPort());
i++;
try {
Socket server = serverSocket.accept();
//彩蛋
//server.setSoTimeout(5);
//彩蛋
//当服务端监听到客户端的连接后才会执行以下代码
System.out.println("服务端打印的远程主机地址为:"+server.getRemoteSocketAddress());
//监听来自客户端的消息
DataInputStream dis = new DataInputStream(server.getInputStream());
System.out.println("服务端接收到的来自于客户端的信息为:"+dis.readUTF());
//通过socket向客户端发送信息
DataOutputStream dos = new DataOutputStream(server.getOutputStream());
dos.writeUTF("我是服务端,您已连接到:"+server.getLocalSocketAddress());
server.close();
}catch (SocketTimeoutException e){
System.out.println("20s内无客户端连接,正在关闭服务端监听服务");
continue;
}catch (IOException e) {
e.printStackTrace();
break;
}
}
}
public static void main(String[] args) {
try {
Thread t1 = new ServerSocketDemo(8089);
t1.run();
}catch(IOException e){
e.printStackTrace();
return;
}
}
}