⑴ java socket多線程問題,我寫了一個socket tcp服務端,高手來進來看下,謝啦。是關於多客戶端並聯的問題
不對,你應該單獨寫個一個處理線程類,如果需要的連接就new一下,因為每次new一下,專線程的名字都不一樣,但屬如果後期要用到銷毀的時候,最好寫一個hasMap存儲這些線程,當下線時,就根據values來銷毀或遍歷一下hasMap,獲取到線程的名字,然後就destroy();
韓順平java視頻教程里的qq項目里有詳細的解說!
⑵ 求Java中用socket通信的多線程服務端,要求客戶端可以長時間連接及發送信息並且無需每次都要創建新對象
創建一個新線程時將這個線程對象的引用賦給一個變數:
MyThread thread1 = new MyThread();
MyThread thread2 = new MyThread();
thread1.start();
thread2.start();
在你的線程類中應該提供一個方法,用於關閉這個線程所創建的socket連接。例如你的MyThread類中應該提供一個關閉socket的方法:
public void closeSocket()
{
//這里關閉當前對象的socket
}
這樣,如果你想關閉thread1中的連接(該連接使用8888埠),則只要調用這個方法:
thread1.closeSocket();
⑶ java TCP做聊天程序是應該一個聊天窗口一個線程還是一個Socket一個線程
socket通訊是阻塞的,一個聊天就有一個socket,需要一直在哪裡阻塞讀取數據,所以就一個socket就要用一個線程了。如果用nio的話,通訊是非阻塞的,就不用一個聊天一個線程了。如果聊天人數大的話,建議用nio。現在netty框架就非常不錯。
⑷ 求大神點撥:「Java Socket」編程採用TCP協議是否能夠在一個線程里寫出多
Socket,又稱為套接字,Socket是計算機網路派枝通信的基本的技術之一。如今大多數基於網路的軟體,如瀏覽器,即時通訊工具甚至是P2P下載都是基於Socket實現的。本文仿羨慧會介紹一下基於TCP/IP的Socket編程,並且如何寫一個客戶端/伺服器程序。
方法/步驟
Java中的socket編程 下面的部分將通過一些示例講解一下如何使用socket編寫客戶端和伺服器端的程序。 注意:在接下來的示例中,我將使用基於TCP/IP協議的socket編程,因為這個協議遠遠比UDP/IP使用的要廣泛。並且所有的socket相關的類都位於java.net包備答下,所以在我們進行socket編程時需要引入這個包。
寫入數據 接下來就是寫入請求數據,我們從客戶端的socket對象中得到OutputStream對象,然後寫入數據後。很類似文件IO的處理代碼。
打開伺服器端的socket
讀取數據 通過上面得到的socket對象獲取InputStream對象,然後安裝文件IO一樣讀取數據即可。這里我們將內容列印出來。
使用socket實現一個回聲伺服器,就是伺服器會將客戶端發送過來的數據傳回給客戶端。
⑸ 關於java socket 多線程編程
業務需要這么抄復雜嗎???如果你要實現伺服器和客戶端都可以向對方發送消息,而不等待對方應答,只需要把InputStream和OutputStream分別放在兩個不同線程里就行了,即是說把接收流與發送流分別用一個線程監聽處理。如果要實現不分客戶端伺服器的話,用UDP通信即可
⑹ java socket編程,兩個socket,多個線程,好比A socket的數據,怎麼發送到B socket埠,一個socket好弄
先有個ServerSocket,監聽鏈接到它上面的所有請求(即accept()函數),accept返回一個Socket對象,你可以保存所有的已經鏈接的Socket對象,然後可以從每個socket找到該鏈接的Address和其他信息(詳見API),根據該地址來選擇性發送數據。
⑺ JAVA程序完成伺服器和客戶端的SOCKET通訊,要求伺服器使用多線程接收和處理多個客戶端訪問請求
1. 客戶端程序
import java.io.*;
import java.net.*;
public class TalkClient {
public static void main(String args[]) {
try{
Socket socket=new Socket("127.0.0.1",4700);
//向本機的4700埠發出客戶請求
BufferedReader sin=new BufferedReader(new InputStreamReader(System.in));
//由系統標准輸入設備構造BufferedReader對象
PrintWriter os=new PrintWriter(socket.getOutputStream());
//由Socket對象得到輸出流,並構造PrintWriter對象
BufferedReader is=new BufferedReader(new InputStreamReader(socket.getInputStream()));
//由Socket對象得到輸入流,並構造相應的BufferedReader對象
String readline;
readline=sin.readLine(); //從系統標准輸入讀入一字元串
while(!readline.equals("bye")){
//若從標准輸入讀入的字元串為 "bye"則停止循環
os.println(readline);
//將從系統標准輸入讀入的字元串輸出到Server
os.flush();
//刷新輸出流,使Server馬上收到該字元串
System.out.println("Client:"+readline);
//在系統標准輸出上列印讀入的字元串
System.out.println("Server:"+is.readLine());
//從Server讀入一字元串,並列印到標准輸出上
readline=sin.readLine(); //從系統標准輸入讀入一字元串
} //繼續循環
os.close(); //關閉Socket輸出流
is.close(); //關閉Socket輸入流
socket.close(); //關閉Socket
}catch(Exception e) {
System.out.println("Error"+e); //出錯,則列印出錯信息
}
}
}
2. 伺服器端程序
import java.io.*;
import java.net.*;
import java.applet.Applet;
public class TalkServer{
public static void main(String args[]) {
try{
ServerSocket server=null;
try{
server=new ServerSocket(4700);
//創建一個ServerSocket在埠4700監聽客戶請求
}catch(Exception e) {
System.out.println("can not listen to:"+e);
//出錯,列印出錯信息
}
Socket socket=null;
try{
socket=server.accept();
//使用accept()阻塞等待客戶請求,有客戶
//請求到來則產生一個Socket對象,並繼續執行
}catch(Exception e) {
System.out.println("Error."+e);
//出錯,列印出錯信息
}
String line;
BufferedReader is=new BufferedReader(new InputStreamReader(socket.getInputStream()));
//由Socket對象得到輸入流,並構造相應的BufferedReader對象
PrintWriter os=newPrintWriter(socket.getOutputStream());
//由Socket對象得到輸出流,並構造PrintWriter對象
BufferedReader sin=new BufferedReader(new InputStreamReader(System.in));
//由系統標准輸入設備構造BufferedReader對象
System.out.println("Client:"+is.readLine());
//在標准輸出上列印從客戶端讀入的字元串
line=sin.readLine();
//從標准輸入讀入一字元串
while(!line.equals("bye")){
//如果該字元串為 "bye",則停止循環
os.println(line);
//向客戶端輸出該字元串
os.flush();
//刷新輸出流,使Client馬上收到該字元串
System.out.println("Server:"+line);
//在系統標准輸出上列印讀入的字元串
System.out.println("Client:"+is.readLine());
//從Client讀入一字元串,並列印到標准輸出上
line=sin.readLine();
//從系統標准輸入讀入一字元串
} //繼續循環
os.close(); //關閉Socket輸出流
is.close(); //關閉Socket輸入流
socket.close(); //關閉Socket
server.close(); //關閉ServerSocket
}catch(Exception e){
System.out.println("Error:"+e);
//出錯,列印出錯信息
}
}}
⑻ Java 多線程 用socket通信
ServerSocket
server=new
ServerSocket(port);
/*..以下是監御首聽旦拆祥.*/
try{
while(true){
Socket
socket=server.accept(0;
Thread
handleThread=new
Thread(new
HandleRun(socket)).start();
//直接把跟客戶端連接的socket放到一個線程中處理。
//模搏之後,自己定義一個實現Runnable的HandleRun類即可(用於處理c-s之間的通信)
}
}catch(Exception
ex){}
看不懂的話,就追問。再不會的話,可以花點時間幫你寫個小小的Demo