Java套接字编程简单示例

时间:2022-12-14 22:30:04
服务端:
package com.zzj.test;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;

public class SocketServerTest {

/**
* @param args
*/
public static void main(String[] args) {
try {
// 构造方法绑定了一个端口
ServerSocket serverSocket = new ServerSocket(8888);
/**
* serverSocket.accept()等待客户端连接,是一个阻塞方法,直到有客户端连接时才会返回。
* 此方法返回的是包含客户端信息的套接字。 该方法成功返回之后,服务器就和客户端建立了一个可靠的连接,可以相互发送和接收消息了
*/
Socket socket = serverSocket.accept();
System.out.println("IP:" + socket.getInetAddress() + ",port:"
+ socket.getPort());

/**
* 使用输入流接收消息
*/
InputStream inputStream = socket.getInputStream();// 获取输入管道
BufferedReader reader = new BufferedReader(new InputStreamReader(
inputStream));
// readLine()是阻塞方法,直到读到内容并且遇到终止符(“\r”、“\n”、“\r\n”等等)或者到达流的末尾(返回Null)才返回
System.out.println(reader.readLine());

/**
* 使用输出流发送消息
*/
OutputStream outputStream = socket.getOutputStream();// 获取输出管道
// 末尾必须加终止符,否则另一端的bufferedreader.readline()方法会处于阻塞状态,直到流关闭
outputStream.write("Hello,client!\r".getBytes());
outputStream.flush();

outputStream.close();
inputStream.close();
socket.close();
} catch (IOException e) {
e.printStackTrace();
}

}

}

客户端:
package com.zzj.test;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.net.Socket;
import java.net.UnknownHostException;

public class SocketTest {

/**
* @param args
*/
public static void main(String[] args) {
try {
/**
* 构造方法指定了远程主机的IP和端口号。 成功创建对象之后,客户端就和服务器建立了一个可靠的连接,可以相互发送和接收消息了
*/
Socket socket = new Socket("127.0.0.1", 8888);

/**
* 使用输出流发送消息
*/
OutputStream outputStream = socket.getOutputStream();// 获取输出管道
// 末尾必须加终止符,否则另一端的bufferedreader.readline()方法会处于阻塞状态,直到流关闭
outputStream.write("Hello,server!\r".getBytes());
outputStream.flush();

/**
* 使用输入流接收消息
*/
InputStream inputStream = socket.getInputStream();// 获取输入管道
BufferedReader reader = new BufferedReader(new InputStreamReader(
inputStream));
// readLine()是阻塞方法,直到读到内容并且遇到终止符(“\r”、“\n”、“\r\n”等等)或者到达流的末尾(返回Null)才返回
System.out.println(reader.readLine());

outputStream.close();
inputStream.close();
socket.close();
} catch (UnknownHostException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}

}