这里写一篇文章来和大家请教一下,关于socket通信的方式
这里我也是通过网络的其他地方整理的代码,来实现自己的功能
但是我发现一个问题,就是如此采用UDP方式,必须先向服务端发送一个数据才能接受到来自服务器定时不断发出的数据。不知道怎么解决。小弟对UDP方式理解的不够深入,求大神指导呢
这里贴出源码
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Net;
using System.Net.Sockets;
using System.IO;
namespace SocketHelp
{
public delegate void ReadDataEvent(byte[] Bytes, int size);
#region TCP协议
#region ClientTCP
public class ClientTCP
{
private Socket client;
public byte[] oubytes;
//public static PrintMsg _PrintMsg;
public ReadDataEvent ReadData;
public ClientTCP()
{
oubytes =new byte[1024];
}
public bool StartClient(string IP, int port)
{
try
{
client = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
client.BeginConnect(IP, port, new AsyncCallback(ConnectTarget), client);
// 接收输入并发消息
//bool send = false;
//while (true)
//{
// showMsg("ME: " + DateTimeOffset.Now.ToString("G"));
// send = SendMsg;
// inbytes = Encoding.UTF8.GetBytes(Msg);
// client.BeginSend(inbytes, 0, inbytes.Length, SocketFlags.None, new AsyncCallback(SendTarget), client);
//}
//client.Close();
return true;
}
catch (Exception ex)
{
Method.writeLog(ex.Message.ToString());
return false;
}
}
public bool SendData(byte[] Bytes)
{
try
{
client.BeginSend(Bytes, 0, Bytes.Length, SocketFlags.None, new AsyncCallback(SendTarget), client);
return true;
}
catch (Exception ex)
{
Method.writeLog(ex.Message.ToString());
return false;
}
}
private void ConnectTarget(IAsyncResult res)
{
Method.writeLog("已建立连接");
Socket sever = (Socket)res.AsyncState;
sever.EndConnect(res);
sever.BeginReceive(oubytes, 0, oubytes.Length, SocketFlags.None, ReceiveData, sever);
}
private void SendTarget(IAsyncResult res)
{
//Socket client = (Socket)res.AsyncState;
//int size = client.EndSend(res);
}
private void ReceiveData(IAsyncResult res)
{
try
{
Socket sever = (Socket)res.AsyncState;
int size = sever.EndReceive(res);
if (ReadData != null)
{
//解析数据
ReadData(oubytes, size);
}
// 继续等待输入
sever.BeginReceive(oubytes, 0, oubytes.Length, SocketFlags.None, new AsyncCallback(ReceiveData), sever);
}
catch (Exception ex)
&nbs