我需要在C#中實現套接字客戶端。C#套接字客戶端:瞭解和管理消息
套接字服務器是通過端口與我的C#客戶端連接的軟件3000。
每個消息由如下:
- 某些字段:4個字節
- 信息長度:2個字節
- 某些字段:4個字節
- 消息指數:2個字節
- 某些字段:取決於第e'消息長度'字段
當客戶端接收時,緩衝區可能包含更多的一條消息和重複的消息。
我必須拆分消息中緩衝區的內容,如果該消息不存在於此列表中,則將消息保存在列表中。
據我所知,如果消息的索引在列表中,消息已經存在於列表中。
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Net;
using System.Net.Sockets;
namespace Client
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
Socket sck = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
IPEndPoint endPoint = new IPEndPoint(IPAddress.Parse("127.0.0.1"), 3000);
private void btnC_Click(object sender, EventArgs e)
{
sck.Connect(endPoint);
if (sck.Connected)
{
Form1.ActiveForm.Text = Form1.ActiveForm.Text + " - Connected";
}
byte[] buffer = new byte[255];
int rec;
while (true)
{
buffer = new byte[255];
rec = sck.Receive(buffer, 0, buffer.Length, 0);
Array.Resize(ref buffer, rec);
/* Understand and Manage the messages */
}
}
}
}
你有一些建議,實施正確的代碼來理解和管理收到的消息嗎?
在此先感謝!
法比奧
我會用'TcpClient'代替原始套接字的,爲了簡單起見啓動。然後從流中讀取 - 讀取您瞭解的數據量,解釋它,然後讀取其餘的數據。 'BinaryReader'可以對此非常有幫助。 – 2015-02-10 17:11:25
您需要查看消息框架。 – 2015-02-10 17:25:08
在這樣的情況下使用Tcp將產生比您期望的更復雜的代碼。例如,您可能也只收到一部分消息。即使只有一個字節是可能的,所以你甚至不知道消息的長度,但只是接收它的第一部分。這是因爲TCP是一個流媒體協議。儘可能在你的情況下使用UDP。使用UDP,您將收到單個消息。這種設計更簡單。無論是客戶端還是服務器。 – 2015-02-10 17:33:08