Javaにおけるソケットの使い方
javaでのソケットを使った通信は、サーバーとクライアントに分類できます。
サーバー側:
- ServerSocketクラスのオブジェクトを作成し、ポート番号を指定する。
- ServerSocketのaccept()メソッドでクライアントからの接続要求を受け取り、Socketオブジェクトを返却します。
- Socketオブジェクトの入出力ストリームを通じてデータの読み書きを行う。
- 通信が完了したら、ソケットオブジェクトとサーバソケットオブジェクトを閉じます。
サンプルコード:
import java.io.*;
import java.net.*;
public class Server {
public static void main(String[] args) {
try {
// 创建ServerSocket对象,并指定端口号
ServerSocket serverSocket = new ServerSocket(8888);
// 接收客户端连接请求,返回一个Socket对象
Socket socket = serverSocket.accept();
// 获取输入流和输出流
InputStream is = socket.getInputStream();
OutputStream os = socket.getOutputStream();
// 读取客户端发送的数据
BufferedReader reader = new BufferedReader(new InputStreamReader(is));
String data = reader.readLine();
System.out.println("Client: " + data);
// 向客户端发送数据
BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(os));
writer.write("Hello, client!\n");
writer.flush();
// 关闭流和Socket对象
reader.close();
writer.close();
is.close();
os.close();
socket.close();
serverSocket.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
クライアント
- サービス側のIPアドレスとポート番号を指定してソケットオブジェクトを作成する。
- Socketオブジェクトの入力ストリームと出力ストリームを使ってデータの読み書きを行います。
- 通信終了時は必ずSocketオブジェクトをクローズすること。
サンプルコード:
import java.io.*;
import java.net.*;
public class Client {
public static void main(String[] args) {
try {
// 创建Socket对象,指定服务端的IP地址和端口号
Socket socket = new Socket("127.0.0.1", 8888);
// 获取输入流和输出流
InputStream is = socket.getInputStream();
OutputStream os = socket.getOutputStream();
// 向服务端发送数据
BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(os));
writer.write("Hello, server!\n");
writer.flush();
// 读取服务端发送的数据
BufferedReader reader = new BufferedReader(new InputStreamReader(is));
String data = reader.readLine();
System.out.println("Server: " + data);
// 关闭流和Socket对象
writer.close();
reader.close();
is.close();
os.close();
socket.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
本コードではシンプルなソケット通信の手順を示しましたが、実際の使用では例外処理、データの巡回読込などを行う必要があります。