㈠ socket編程中如何接收變長字元串
TCP是流式的傳輸,也就是說,TCP自身並不知道你的協議需要傳遞多大的數據,什麼時候結束,如何告訴接收你數據的對端數據已經接收完畢了,需要自己定義協議的格式.主流的方式有以下兩種:
第一種是http協議這樣的,以"\r\n\r\n"來表示接收完畢,也就是說有一個"標志位".
第二種是在協議中加入表示數據包長度的欄位,首先讀取包頭,解析包頭得到接下來數據的長度,然後再進行下一步的讀取.
㈡ tcp socket怎麼接受一個數據包。 或者說對方先發了一個數據的大小,怎樣先把大小收到,然後再收數據
對你來說就是一個字元數組,你直接取這個數組的大小就行了。
㈢ 關於C#,100分+相送。c#中socket編程中,怎麼獲取接受到得數據長度
伺服器端向客戶端傳送文件之前,可以先向客戶端傳送一個數據大小的值。否則只能累計分包值得到文件數據最終長度
receive方法中的幾個重載都是什麼啊
------------------------------------
完全可以自己看MSDN
Socket.Receive (Byte[]) 從綁定的 Socket 套接字接收數據,將數據存入接收緩沖區。
由 .NET Compact Framework 支持。
Socket.Receive (泛型 IList) 從綁定的 Socket 接收數據,將數據存入接收緩沖區列表中。
Socket.Receive (Byte[], SocketFlags) 使用指定的 SocketFlags,從綁定的 Socket 接收數據,將數據存入接收緩沖區。
由 .NET Compact Framework 支持。
Socket.Receive (泛型 IList, SocketFlags) 使用指定的 SocketFlags,從綁定的 Socket 接收數據,將數據存入接收緩沖區列表中。
Socket.Receive (Byte[], Int32, SocketFlags) 使用指定的 SocketFlags,從綁定的 Socket 接收指定位元組數的數據,並將數據存入接收緩沖區。
由 .NET Compact Framework 支持。
Socket.Receive (泛型 IList, SocketFlags, SocketError) 使用指定的 SocketFlags,從綁定的 Socket 接收數據,將數據存入接收緩沖區列表中。
Socket.Receive (Byte[], Int32, Int32, SocketFlags) 使用指定的 SocketFlags,從綁定的 Socket 接收指定的位元組數,存入接收緩沖區的指定偏移量位置。
由 .NET Compact Framework 支持。
Socket.Receive (Byte[], Int32, Int32, SocketFlags, SocketError) 使用指定的 SocketFlags,從綁定的 Socket 接收數據,將數據存入接收緩沖區。
㈣ c#的socket編程中,怎麼獲取接受到得數據長度
//測試URL程序 客戶端和伺服器端在後面
public class TestURL {
public static void main(String[] args) throws IOException {
//構建一URL對象
URL url=new URL("file:///C:/test.out");
BufferedReader in = new BufferedReader(new InputStreamReader(url.openStream()));
//使用openStream得到一輸入流並由此構造一個BufferedReader對象
String inputLine;
while ((inputLine = in.readLine()) != null)
//從輸入流不斷的讀數據,直到讀完為止
System.out.println(inputLine); //把讀入的數據列印到屏幕上
in.close(); //關閉輸入流
}
}
客戶端程序
public class ClientDemo {
public static void main(String[] args) throws UnknownHostException, IOException {
//向本機的4700埠發出請求
Socket socket=new Socket("localhost",4700);
//由系統標准輸入創建一個輸入流,負責接收界面輸入的數據
BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
//由Socket對象得到一個輸出流
//負責向伺服器端發送數據
PrintWriter pw=new PrintWriter(socket.getOutputStream());
//由Socket得到一個對象的輸入流
//負責接收伺服器端返回的信息
BufferedReader brsocket=new BufferedReader(new InputStreamReader(socket.getInputStream()));
String readLine;
//從標准輸入設備上接收傳入的一個字元串
System.out.println("請您輸入向伺服器的數據");
readLine=br.readLine();
//如果頁面傳入bye,則結束循環
while(!readLine.equals("bye")){
/*向伺服器發送接收到的字元串*/
pw.println(readLine);
pw.flush();
//在標准輸出設備上輸出剛才發送給伺服器的數據
System.out.println("Client:"+readLine);
//輸出從伺服器端得到的數據
System.out.println("正在等待接收伺服器端信息:");
System.out.println("Server:"+brsocket.readLine());
//從標准輸入設備上接收傳入的一個字元串
System.out.println("請您輸入向伺服器的數據");
readLine=br.readLine();
}
brsocket.close();
pw.close();
br.close();
socket.close();
}
}
服務端程序
public class ServerDemo {
public static void main(String[] args) throws IOException {
/*創建伺服器監聽的介面*/
ServerSocket server=new ServerSocket(4700);
//使用accept()阻塞等待客戶請求,有客戶
//請求到來則產生一個Socket對象,並繼續執行
Socket socket=server.accept();
String line;
//由Socket對象得到一個輸入流,負責從客戶端接收數據
BufferedReader brin=new BufferedReader(new InputStreamReader(socket.getInputStream()));
//由Socket對象得到一個輸出流,負責向客戶端發送數據
PrintWriter pw=new PrintWriter(socket.getOutputStream());
//創建一個標准輸入設備的輸入流
BufferedReader in=new BufferedReader(new InputStreamReader(System.in));
//在標准輸出設備上輸出從客戶端得到的數據
System.out.println("正在等待客戶端的數據......");
System.out.println("Client:"+brin.readLine());
System.out.println("請您輸入要向客戶端發送的信息:");
//從標准輸入設備上得到字元串
line=in.readLine();
////如果該字元串為 "bye",則停止循環
while(!line.equals("bye")){
//向客戶端輸出信息
pw.println(line);
pw.flush();
//在標准輸出設備上輸出剛才Server讀入的字元串
System.out.println("Server:"+line);
//輸出剛才從客戶端讀入的數據
System.out.println("正在等待客戶端的數據......");
System.out.println("Client"+brin.readLine());
System.out.println("請您輸入要向客戶端發送的信息:");
line=in.readLine();
}
brin.close();
in.close();
pw.close();
server.close();
socket.close();
}
}
㈤ c++socket編程中怎樣接收不定長大小的消息
你可以先發送長度(比如一個int),再發送數據;
接收方先接收長度(int),然後根據長度接收數據