个简单的Socket 应用程序
Listener =new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); IPEndPoint BindIp = new IPEndPoint(IPAddress.Parse(IP), int.Parse(txtPort.Text)); Listener.Bind(BindIp);
Listener.Listen(100);
btnListen.Text = "Listening ";
staticTool.Text = "正在监听";
IsListen = true;
private void ReceiveWorkThread(object obj)
{
Socket socket = (Socket)obj ;
byte[] buffer = new byte[1024];
string strSend;
while (IsListen)
{
int receiveCount = socket.Receive(buffer);
if (receiveCount > 0)
{
IPEndPoint remoEP = (IPEndPoint)socket.RemoteEndPoint;
recString = "来自客户端" + remoEP.Address.ToString() + "的消息:" + Encoding.Default.GetString(buffer, 0, receiveCount);
this.Invoke(new EventHandler(ReceiveData), new string[] { recString }); strSend = "服务器端已收到:" + Encoding.Default.GetString(buffer,0,receiveCount); //socket.Send(buffer, receiveCount, SocketFlags.None);
buffer = Encoding.Default .GetBytes(strSend);
socket.Send(buffer);
}
else
{
socket.Close();
break;
}
}
4) 将接收到的数据显示出来,利用了委托定义了一个事件,因为在别的线程中是无法调用界面控件的。
private void ReceiveData(object sender,EventArgs e )
{
if (recString.Length > 0)
{
this.listBox1.Items.Insert (0,recString);
}
}
Socket ClientSocket=null ;
ClientSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
ClientSocket.Connect(IPAddress.Parse(txtIP.Text), int.Parse(txtPort .Text )); new Thread(new ParameterizedThreadStart(ReceiveThread)).Start ();
private void ReceiveThread(object obj)
{
while (true)
{
byte[] buffer = new byte[1024];
int receiveLen = ClientSocket.Receive(buffer);
if (receiveLen > 0)
{
RcvStr = Encoding.Default.GetString(buffer);
Invoke(new EventHandler(ReceiveData));
}
}
}
private void ReceiveData(object sender, EventArgs e)
{
if (RcvStr.Length > 0)
{
listBox1.Items.Insert(0, RcvStr);
RcvStr = string.Empty;
}
}
private void btnSend_Click(object sender, EventArgs e)
{
try
{
byte[] buffer = Encoding.ASCII.GetBytes(txtSendData .Text );
ClientSocket.Send(buffer);
}
catch (SocketException ex)
{
MessageBox.Show(ex.Message);
}
}