我想在客户端和服务器之间进行双向通信,到目前为止我已经实现了单向通信。 我在JAVA中的代码看起来像,
服务器侧
public class server{
@SuppressWarnings("deprecation")
public static void main(String[] args)
{
try{
ServerSocket s=new ServerSocket(9998);
Socket ss=s.accept();
DataInputStream din=new DataInputStream(ss.getInputStream());
DataInputStream uip=new DataInputStream(System.in);
DataOutputStream dout=new DataOutputStream(ss.getOutputStream());
System.out.println("Enter message to send to client\n");
String stc=uip.readLine();
dout.writeBytes(""+stc);
din.close();
dout.close();
uip.close();
}
catch(Exception e)
{
System.out.println(e);
}`enter code here`
}
}
客户机侧
public class client{
public static void main(String[] args)
{
try{
Socket ss=new Socket("localhost",9998);
DataInputStream din=new DataInputStream(ss.getInputStream());
DataInputStream uip=new DataInputStream(System.in);
DataOutputStream dout=new DataOutputStream(ss.getOutputStream());
String msg=din.readLine();
System.out.println("Received msg is "+msg);
din.close();
dout.close();
uip.close();
}
catch(Exception e)
{
System.out.println(e);
}
}
}
我试图在客户端获取输入并尝试以相同的方式发送到服务器。但那不起作用。我哪里错了?我该如何实现双向沟通。
在客户端,我收到了来自用户的输入并使用了.writeBytes(value);
并在服务器端的din中执行了readLine()
,就像我在上面的单向通信中所做的那样。但这并不奏效。我在哪里做错了?
答案 0 :(得分:0)
我假设您在不同的进程中运行这两个程序,并且您只期望从服务器发送的客户端上的结果。从客户端,您不会向服务器发送任何内容。
如果您没有收到任何错误,请尝试刷新流,如:
dout.writeBytes(""+stc);
dout.flush();
来自评论:添加了以下代码。
在服务器端接收代码
// this is your code on server
dout.writeBytes(""+stc);
//Add this code
String msgServer = din.readLine();
System.out.println("Received msg on Server: " + msgServer );
添加客户端代码:
// this is your code on client
System.out.println("Received msg is "+msg);
dout.writeBytes("Test data from client");
dout.flush();
答案 1 :(得分:0)
创建双重通信系统的最佳方法是创建两个线程,一个用于编写消息,另一个用于接收消息(在客户端和服务器端)。
侦听线程接收消息唤醒并执行某些操作。如果需要响应,则创建响应并将其添加到队列中。
写入线程定期检查要发送的消息队列。如果它有发送它们。
答案 2 :(得分:0)
这是双向客户端服务器通信的最佳方式。" dout.shutdownOutput();"在客户端发送函数后对此行进行编码。这是名为半套接字的函数,它将有助于来回通信。