簡體   English   中英

C#從Socket接收數據並將其放入字符串中?

[英]C# Receive Data from Socket and put it in a String?

我有一個套接字服務器,我試圖從客戶端收到一個字符串。

當我使用它時,客戶端是完美的

Socket s = myList.AcceptSocket();
Console.WriteLine("Connection accepted from " + s.RemoteEndPoint);

byte[] b = new byte[100];
int k = s.Receive(b);
Console.WriteLine(k);
Console.WriteLine("Recieved...");
for (int i = 0; i < k; i++) {
    Console.Write(Convert.ToChar(b[i]));
    ASCIIEncoding asen = new ASCIIEncoding();
    s.Send(asen.GetBytes("The string was recieved by the server."));
}

一切都還好,我在控制台中得到了我的字符串。

但是我如何才能將我的接收變成一個字符串,以便在開關盒中使用它?

像這樣:

string action = Convert.ToChar(b[i]);

錯誤:

名稱i不在當前上下文中。 它是我得到的唯一錯誤消息。

Init套接字

Socket socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
IPAddress ipAdd = System.Net.IPAddress.Parse(m_ip);
IPEndPoint remoteEP = new IPEndPoint(ipAdd, m_port);

連接插座

socket.Connect(remoteEP);

從套接字接收

byte[] buffer = new byte[1024];
int iRx = socket.Receive(buffer);
char[] chars = new char[iRx];

System.Text.Decoder d = System.Text.Encoding.UTF8.GetDecoder();
int charLen = d.GetChars(buffer, 0, iRx, chars, 0);
System.String recv = new System.String(chars);

發信息

byte[] byData = System.Text.Encoding.ASCII.GetBytes("Message");
socket.Send(byData);

關閉插座

socket.Disconnect(false);
socket.Close();

假設s是一個你調用receive的Socket對象,你會得到一個byte[] 要將其轉換回字符串,請使用適當的編碼,例如

string szReceived = Encoding.ASCII.GetString(b);

編輯:由於緩沖區b總是100個字節,但實際接收的字節數隨每個連接而變化,因此應該使用Socket.Receive()調用的返回值來僅轉換實際接收的字節數。

byte[] b = new byte[100];
int k = s.Receive(b);
string szReceived = Encoding.ASCII.GetString(b,0,k); 

這種方式不需要設置緩沖區大小,它適合響應:

public static byte[] ReceiveAll(this Socket socket)
    {
        var buffer = new List<byte>();

        while (socket.Available > 0)
        {
            var currByte = new Byte[1];
            var byteCounter = socket.Receive(currByte, currByte.Length, SocketFlags.None);

            if (byteCounter.Equals(1))
            {
                buffer.Add(currByte[0]);
            }
        }

        return buffer.ToArray();
    }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM