1.服务端代码
public Socket newsock; //声明一个Socket实例
public Socket server1;
public Socket Client;
public delegate void MyInvoke(string str);
public IPEndPoint localEP;
public int localPort;
public EndPoint remote;
public Hashtable _sessionTable;
//新建一个委托线程
ThreadStart myThreadDelegate = new ThreadStart(DvListen);
//实例化新线程
thRecv_DvNetWork = new Thread(myThreadDelegate);
thRecv_DvNetWork.Start();
public void Listen()
{
//设置端口
setPort = int.Parse(this.tbDvPort.Text.Trim());
//初始化SOCKET实例
newsock = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
//允许SOCKET被绑定在已使用的地址上。
newsock.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.ReuseAddress, true);
//初始化终结点实例
localEP = new IPEndPoint(IPAddress.Any, setPort);
try
{
_sessionTable = new Hashtable(53);
//绑定
newsock.Bind(localEP);
//监听
newsock.Listen(10);
//开始接受连接,异步。
newsock.BeginAccept(new AsyncCallback(DvOnConnectRequest), newsock);
}
catch (Exception ex)
{
MessageBox.Show(ex.ToString());
}
}
public void DvOnConnectRequest(IAsyncResult ar)
{
int lenSrc, lenCmd = 0;
Byte[] bufCmd = new Byte[200];
try
{
//初始化一个SOCKET,用于其它客户端的连接
server1 = (Socket)ar.AsyncState;
Client = server1.EndAccept(ar);
//将要发送给连接上来的客户端的提示字符串
DateTimeOffset now = DateTimeOffset.Now;
byte[] byteDateLine = new byte[1024 * 1024];
//Byte[] byteDateLine = System.Text.Encoding.UTF8.GetBytes(strDateLine);
将提示信息发送给客户端,并在服务端显示连接信息。
//remote = Client.RemoteEndPoint;
DvAddContent(richDvLog, Client.RemoteEndPoint.ToString() + "连接成功。" + now.ToString("G") + "\r\n");
//Client.Send(byteDateLine, byteDateLine.Length, 0);
_sessionTable.Add(Client.RemoteEndPoint, null);
//等待新的客户端连接
server1.BeginAccept(new AsyncCallback(DvOnConnectRequest), server1);
while (true)
{
lenSrc = Client.Receive(byteDateLine);
if (lenSrc > 0)
{
Array.Copy(byteDateLine, V2XResult.Recv_DvBufferTCP, lenSrc);
DecodeData_RecvDv(ref bufCmd, V2XResult.Recv_DvBufferTCP, lenSrc, ref lenCmd);
}
}
}
catch(Exception ex)
{
};
}
2.客户端代码: