请您给我看一个使用java nio进行通信的客户端和服务器的本地主机的小例子吗?我需要了解它如何工作。例如1)客户端需要连接,客户端连接客户端发送“你好,我是客户端”。 2)服务器接受,服务器从客户端接收消息,服务器响应“你好,我是服务器” 3)客户端发送“你好服务器” 4)服务器发送“你好客户端”。
我不需要服务器一次处理多个客户端,我需要了解的是客户端与服务器之间如何与多个消息建立连接。
答案 0 :(得分:0)
您可以使用以下链接访问您的要求 https://www.geeksforgeeks.org/socket-programming-in-java/ https://www.journaldev.com/741/java-socket-programming-server-client
答案 1 :(得分:0)
如果您不打算处理多个连接,则不太确定为什么需要使用nio。我看不出使用它们的意义。
好的,这里去了:让我知道这是否有效。
服务器代码:
public class Server {
ServerSocket socket;
Socket listener;
public Server(int port) throws IOException {
socket = new ServerSocket(port);
}
public void connect() throws IOException{
listener = socket.accept();
}
public String read() throws IOException{
byte[] temp = new byte[1024];
int bytesRead = 0;
try(InputStream input = listener.getInputStream()){
bytesRead = input.read(temp);
}
return new String(temp,0,bytesRead,"ASCII");
}
public void write(String data) throws IOException{
byte[] temp = new byte[1024];
try(OutputStream out = listener.getOutputStream()){
out.write(data.getBytes());
out.flush();
}
}
public void close(){
socket.close();
}
}
客户代码:
public class Client{
Socket client;
InetSocketAddress addr;
public Client(String ip, int port) throws IOException{
client = new Socket();
addr = new InetSocketAddress(ip,port);
}
public void connect() throws IOException{
client.connect(addr);
}
public String read() throws IOException{
byte[] temp = new byte[1024];
int bytesRead = 0;
try(InputStream input = client.getInputStream()){
bytesRead = input.read(temp);
}
return new String(temp,0,bytesRead,"ASCII");
}
public void write(String data) throws IOException{
byte[] temp = new byte[1024];
try(OutputStream out = client.getOutputStream()){
out.write(data.getBytes());
out.flush();
}
}
public void close(){
client.close();
}
}
现在您要做的就是在服务器上调用connect(),然后在客户端上调用connect()并编写和发送所需的消息。
完成后,别忘了打电话给关闭。
还请注意,您将需要某种机制来告知服务器和客户端每条消息将持续多长时间。或者,您可以指定一个结束字符,告诉客户端/服务器消息已结束。
服务器中的一个发送不一定等于客户端中的一个发送,反之亦然。您将必须弄清楚该怎么做。