c# Socket发送与接收方法
发布时间
阅读量:
阅读量
客户端:
/// <summary>
/// socket发送字节数组
/// </summary>
/// <param name="sendData">要发送的byte[]</param>
/// <param name="ip">服务器IP</param>
/// <param name="port">服务器端口</param>
/// <returns>接收的byte[]</returns>
public static byte[] SendBySocket(byte[] sendData, string ip, int port)
{
byte[] byteReceive = null;
try
{
IPEndPoint remoteEndPoint = new IPEndPoint(IPAddress.Parse(ip), port);
Socket socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
socket.Connect(IPAddress.Parse(ip), port);
socket.Send(sendData);
int count, size = 512;
byte[] data = new byte[size];
MemoryStream ms = new MemoryStream();
while (0 != (count = socket.Receive(data, size, SocketFlags.None)))
ms.Write(data, 0, count);
byteReceive = ms.ToArray();
ms.Close();
//方法2
//int bytes = 0;
//MemoryStream ms = new MemoryStream();
//while (true)
//{
// byte[] byteMessage = new byte[10];
// bytes = socket.Receive(byteMessage, byteMessage.Length, 0);
// if (bytes <= 0)
// break;
// ms.Write(byteMessage, 0, bytes);
//}
//byteReceive = ms.ToArray();
//ms.Close();
socket.Shutdown(SocketShutdown.Both);
socket.Close();
}
catch
{
return null;
}
return byteReceive;
}
代码解读
服务端:
bool btnstatu = true; //开始停止服务状态
Socket listener;
//开始停止服务按钮
private void btnStart_Click(object sender, EventArgs e)
{
CancellationTokenSource cts = new CancellationTokenSource();
Task task = new Task(() => Listen(cts.Token), cts.Token);
if (btnstatu)
{
task.Start();
statuBar.Text = "服务已启动,等待客户端连接";
btnstatu = false;
btnStart.Text = "停止服务";
}
else
{
if (listener != null)
{
listener.Close();
listener = null;
}
cts.Cancel();
statuBar.Text = "服务端已停止服务";
btnstatu = true;
btnStart.Text = "开始服务";
statuBar.Text = "服务已停止";
}
}
//监听函数
private void Listen(CancellationToken cts)
{
cts.ThrowIfCancellationRequested();
listener = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
listener.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.ReuseAddress, true);
IPEndPoint iep = new IPEndPoint(IPAddress.Any, ServerConfig.ServerPort);
try
{
listener.Bind(iep);
listener.Listen(10);
while (true)
{
Socket accept = listener.Accept();
byte[] byteMessage = new byte[1024];
accept.Receive(byteMessage);
string recvMsg = Encoding.Default.GetString(byteMessage).Replace("\0", "");
ShowText(DateTime.Now.ToString("[HH:mm:ss]") + accept.RemoteEndPoint.ToString() + "说:" + recvMsg);
string sendMsg = "已收到消息";
accept.Send(Encoding.Default.GetBytes(sendMsg));
accept.Shutdown(SocketShutdown.Both);
accept.Close();
}
}
catch
{
}
}
private void ShowText(string msg)
{
richTextBox1.SafeCall(() =>
{
richTextBox1.AppendText(msg);
richTextBox1.AppendText(System.Environment.NewLine);
});
}
代码解读
全部评论 (0)
还没有任何评论哟~
