[英]Multi-threaded Java TCP Client
我正在編寫Java客戶端應用程序(帶有TCP / IP的基本Java Net程序包)。 客戶端必須從system.in接受輸入,同時必須通過套接字inputstream偵聽來自服務器的任何消息。 收到來自system.in的輸入后,客戶端將獲取該輸入,進行一些處理並將其作為請求發送到服務器。 所以基本上有2個進程在運行,
聽客戶的要求
-偵聽服務器響應。
為此,我實現了2個線程,並在主線程中運行了消息處理。 這個設計夠好嗎?
並且有一種方法可以將從system.in接收到的消息返回到主線程。 線程run()方法返回void。 我使用了一個volatile變量來返回接收到的字符串,但是它說volatile的代價非常高,因為它不使用cpu緩存來存儲該變量。
您可以查看我為Java套接字和多線程示例編寫的這兩個項目。
我猜想ClientExample是您要尋找的那個,但是您也可以看看服務器部分。
基本上,這個想法是啟動兩個單獨的線程來監聽不同的輸入-套接字和控制台。
final Thread outThread = new Thread() {
@Override
public void run() {
System.out.println("Started...");
PrintWriter out = null;
Scanner sysIn = new Scanner(System.in);
try {
out = new PrintWriter(socket.getOutputStream());
out.println(name);
out.flush();
while (sysIn.hasNext() && !isFinished.get()) {
String line = sysIn.nextLine();
if ("exit".equals(line)) {
synchronized (isFinished) {
isFinished.set(true);
}
}
out.println(line);
out.flush();
disconnect();
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} finally {
if (out != null) {
out.close();
}
}
};
};
outThread.start();
另一個用於套接字輸入的線程:
final Thread inThread = new Thread() {
@Override
public void run() {
// Use a Scanner to read from the remote server
Scanner in = null;
try {
in = new Scanner(socket.getInputStream());
String line = in.nextLine();
while (!isFinished.get()) {
System.out.println(line);
line = in.nextLine();
}
} catch (Exception e) {
// e.printStackTrace();
} finally {
if (in != null) {
in.close();
}
}
};
};
inThread.start();
我希望這能幫到您 :)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.