【发布时间】:2016-02-19 09:13:51
【问题描述】:
假设我想与服务器建立一个 Socket 连接,用于接收和发送数据。创建该套接字后,我想继续通过它发送数据并同时接收。我当前的代码不起作用,将不胜感激代码示例。谢谢。我当前的代码:
public static PrintWriter outToServer;
private static Socket clientSocket;
public static BufferedReader inFromServer;
public static void register(InetAddress ip, int port, String name) {
try {
clientSocket = new Socket(ip, port);
outToServer = new PrintWriter(clientSocket.getOutputStream(),true);
inFromServer = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));
new Thread(new Runnable() {
@Override
public void run() {
receive();
}
}).start();
send("reg:" + name);
} catch (Exception e) {
e.printStackTrace();
}
}
//That method is called many times after "send("reg:" + name);"
public static void send(String str) {
outToServer.println(str);
}
private static void receive() {
try{
while (true) {
String str = inFromServer.readLine();
}
} catch(Exception e) {
e.printStackTrace();
}
}
服务器代码:
class TCPServer {
public static void main(String argv[]) throws Exception {
String clientSentence;
ServerSocket welcomeSocket = new ServerSocket(9876);
while (true) {
Socket connectionSocket = welcomeSocket.accept();
BufferedReader inFromClient = new BufferedReader(
new InputStreamReader(connectionSocket.getInputStream()));
clientSentence = inFromClient.readLine();
System.out.println("Received: " + clientSentence);
}
}
}
【问题讨论】:
-
你怎么能确定你收到了什么?
receive()方法中没有输出。另外,我不相信这会编译。当您打电话给new Thread().start时没有()。 inFromServer.readLine() 也应该能够抛出 IOException -
已修复。我想先让发送工作,然后处理接收。
-
readLine()返回null时需要停止阅读。 -
@EJP 如果收到的话,会做这项工作吗?还有这怎么会导致发送问题
-
当然
if可以完成这项工作,或者更常见的是while:while ((line = in.readLine()) != null)。我不记得说过这可能会导致发送问题。它是作为评论发布的,而不是作为答案发布的。