javatcpsocket
A. java中怎麼用tcp/ip將伺服器的消息發送給多個用戶
在Java中使用TCP/IP將伺服器的消息發送給多個用戶時,首先你需要通過accept方法獲取到一個Socket,這個Socket是連接到客戶端的Socket,用於實現兩者之間的通信。
為了實現這個功能,我創建了一個ServerThread類,用於處理與每個客戶端的交互。在ServerThread類中,我為Socket創建了一個成員變數so,並通過構造函數對其進行初始化。這個類還包含兩個方法:send和receive,分別用於發送和接收消息。
為了實現接收消息,我創建了一個內部類Thread,並在其中定義了run方法。這個Thread類繼承自Thread,並重寫了run方法,以實現接收客戶端發送的消息。
接著,我創建了一個ServerThread對象tt,並將其與特定的Socket關聯起來。為了能夠向每個客戶端發送消息,我將ServerThread對象保存在一個集合中。這樣,當需要向某個特定客戶端發送消息時,可以從集合中取出對應的ServerThread對象,調用其send方法,並將要發送的消息對象作為參數傳遞。
為了實現發送消息,我需要在send方法中添加邏輯,將消息通過Socket發送給客戶端。這個過程涉及到使用OutputStream對象將消息寫入Socket的輸出流中。
通過這種方式,可以實現伺服器向多個客戶端發送消息的功能。每個客戶端的交互都由一個獨立的ServerThread處理,這樣可以確保消息發送的可靠性和並發性。
此外,還可以進一步優化這個設計,例如通過多線程處理多個客戶端的請求,提高伺服器的並發性能。在實際應用中,還需要考慮網路錯誤處理、超時處理等問題,以確保系統的穩定性和可靠性。
總之,通過這種方式,可以實現Java中使用TCP/IP將伺服器的消息發送給多個用戶的功能。這為構建高性能的網路應用提供了堅實的基礎。
B. Java中Socket 現在還用的多麼
依然有,這個問題比較空泛,socket是比較底層的,然後往上是ftp和http協議通信
這三個都有用,用的地方不同,socket還有兩種方式:一種udp(無連接),一種tcp/ip(有鏈接)c,c#c++等基本很多語言都有socket通信,不同語言之間只要你喜歡都能用socket(因為協議一樣)
C. 在Java中實現TCP協議編程中怎麼傳
在Java中實現TCP協議編程
ServerSocket:編寫TCP網路服務程序,首先要用到java.net.ServerSocket類用以創建伺服器Socket
構造方法:
ServerSocket(intport):創建綁定到特定埠的伺服器套接字
ServerSocket(intport,intbacklog):利用指定的backlog(伺服器忙時保持連接請求的等待客戶數量),創建伺服器套接字並將其綁定到指定的本地埠號。
ServerSocket(intport,intbacklog,InetAddressbindAddr):使用指定的埠、偵聽backlog和要綁定到的本地IP地址創建伺服器。
Socket:客戶端要與伺服器建立連接,必須先創建一個Socket對象
常用構造方法
Socket(Stringhost,intport):創建一個流套接字並將其連接到指定主機上的指定埠號。
Socket(InetAddressaddress,intport):創建一個流套接字並將其連接到指定IP地址的指定埠號。
伺服器端程序調用ServerSocket類中的accept()方法等待客戶端的連接請求,一旦accept()接收了客戶端連接請求,該方法返回一個與該客戶端建立了專線連接的Socket對象,不用程序去創建這個Socket對象。建立了連接的兩個Socket是以IO流的方式進行數據交換的,Java提供了Socket類中的getInputStream()返回Socket的輸入流對象,getOutputStream()返回Socket的輸出流對象。
TCP伺服器與TCP客戶端間的數據的接受圖示:
用TCP實現伺服器與客戶端的「聊天」:
實例代碼:
客戶端:
packagecom.hbsi.net;
importjava.net.Socket;
importjava.io.*;
publicclassTcpClient{
publicstaticvoidmain(String[]args)throwsException{
//1.建立tcp客戶端socket,要確定要連接的伺服器ip,port
Sockets=newSocket("192.168.49.87",9009);
//獲取鍵盤錄入
BufferedReaderbr=newBufferedReader(newInputStreamReader(System.in));
//2.通過建立的socket,獲取輸出流對象
//數據輸出給伺服器端
OutputStreamout=s.getOutputStream();
BufferedWriterbwout=newBufferedWriter(newOutputStreamWriter(out));
//獲取伺服器端返回的數據
//讀取伺服器端發過來的信息InputStreamReader()
BufferedReaderbrin=newBufferedReader(newInputStreamReader(
s.getInputStream()));
Stringline=null;
while((line=br.readLine())!=null){
if(line.equals("over"))
break;
bwout.write(line);
bwout.newLine();
bwout.flush();
Stringstr=brin.readLine();
System.out.println("server:"+str);
}
br.close();
s.close();
}
}
伺服器端:
packagecom.hbsi.net;
importjava.io.BufferedReader;
importjava.io.BufferedWriter;
importjava.io.InputStream;
importjava.io.InputStreamReader;
importjava.io.OutputStreamWriter;
importjava.net.ServerSocket;
importjava.net.Socket;
publicclassTcpServer{
publicstaticvoidmain(String[]args)throwsException{
//1.建立伺服器socket
ServerSocketss=newServerSocket(9009);
//2.調用accept()
Sockets=ss.accept();
System.out.println(s.getInetAddress().getHostAddress()
+"...connection");
//讀取客戶的信息的輸入流
InputStreamin=s.getInputStream();
BufferedReaderbrin=newBufferedReader(newInputStreamReader(in));
//向客戶端發送信息輸出流,服務端向客戶端返回信息OutputStreamWriter()
BufferedWriterbrout=newBufferedWriter(newOutputStreamWriter(
s.getOutputStream())); Stringline=null;
while((line=brin.readLine())!=null){
System.out.println("client:"+line);
brout.write(line.toUpperCase());//伺服器端收到信息後,將信息轉為大寫返回給客戶端toUpperCase()
brout.newLine();
brout.flush();
}
s.close();
ss.close();
}
}