![](/img/trans.png)
[英]ServerSocket not working when Java as Client and Android as server
[英]Server and ServerSocket in one Application: not working
我試圖編寫一個小程序,打開服務器,創建連接到該服務器並從中接收消息的客戶端。
到目前為止,這是《守則》
public static void main(String[] args) {
final ServerSocket serverSocket;
try {
serverSocket = new ServerSocket(12345);
Thread t = new Thread(){
public void run(){
try {
Socket server = serverSocket.accept();
PrintWriter writer = new PrintWriter(server.getOutputStream(), true);
writer.write("Hello World");
writer.flush();
} catch (IOException e) {
e.printStackTrace();
}
}
};
t.start();
Socket client = new Socket("localhost", 12345);
BufferedReader reader = new BufferedReader(new InputStreamReader(client.getInputStream()));
String message = reader.readLine();
System.out.println("Received " + message);
} catch (IOException e1) {
e1.printStackTrace();
}
}
如果我運行程序,它將一直在readLine()中等待-因此很明顯,客戶端不會從服務器收到消息。 有誰知道為什么這行不通?
您的閱讀線程正在等待數據流中的換行符。 只需更改服務器即可使用:
writer.write("Hello World\r\n");
您將獲得預期的結果。 或者,您可以只關閉服務器套接字,然后當readLine
到達數據流的末尾時將返回它。
您應該將readline放入循環中,如下所示:
public static void main(String[] args) {
final ServerSocket serverSocket;
try {
serverSocket = new ServerSocket(12345);
Thread t = new Thread() {
public void run() {
try {
Socket server = serverSocket.accept();
PrintWriter writer = new PrintWriter(server.getOutputStream(), true);
writer.write("Hello World");
writer.flush();
} catch (IOException e) {
e.printStackTrace();
}
}
};
t.start();
Socket client = new Socket("localhost", 12345);
BufferedReader reader = new BufferedReader(new InputStreamReader(client.getInputStream()));
// Check this --------------------------------------------------->
String message = null;
while ((message = in.readLine()) != null) {
System.out.println("Received " + message);
break; //This break will exit the loop when the first message is sent by the server
}
} catch (IOException e1) {
e1.printStackTrace();
}
}
您可以閱讀該文檔以獲取進一步的說明: http : //download.oracle.com/javase/tutorial/networking/sockets/
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.