*********************************************************
*客户端
*
**********************************************************
private Socket c;
private void client_Load(object sender, EventArgs e)
{
try
{
int port = 2000;//服务器端口号
string host = "127.0.0.1";
IPAddress ip = IPAddress.Parse(host);
IPEndPoint ipe = new IPEndPoint(ip, port);//把ip和端口转化为IPEndPoint实例
c = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);//创建一个Socket
ThreadStart ClientReciveData = new ThreadStart(ReciveData);//创建一个线程来循环接受来自服务端数据
Thread MyThread = new Thread(ClientReciveData);
MyThread.Start();
}
catch(Exception err)
{
throw;
}
}
private void ReciveData()//接受信息
{
while (true)
{
Byte[] buffer = new Byte[1024];
int bytes;
string recvStr = "";
bytes = c.Receive(buffer, buffer.Length, 0);//从客户端接受信息
recvStr += Encoding.Default.GetString(buffer, 0, bytes);
Invoke(new Action(delegate() {
rtb_msg.Text += (recvStr + "/n");//显示到richtextbox
rtb_msg.Focus();
rtb_msg.Select(rtb_msg.TextLength, 0);
rtb_sendMsg.Focus();
}));
}
}
private void btn_sendMsg_Click(object sender, EventArgs e)//发送信息按钮click事件
{
string sendStr = "client"+DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")+"/n"+rtb_sendMsg.Text;
byte[] bs = Encoding.Default.GetBytes(sendStr);
//if (c == null || !c.Connected)//判断socket类是否连接
//{
// connect();
//}
c.Send(bs, bs.Length, 0);//发送测试信息
//Socket sp_Msg = c;
//sp_Msg.BeginSend(bs, 0, bs.Length, 0, new AsyncCallback(EndSendMsg), sp_Msg);
//string recvStr = "";
byte[] recvBytes = new byte[1024];
//int bytes;
//bytes = c.Receive(recvBytes, recvBytes.Length, 0);//从服务器端接受返回信息
//recvStr += Encoding.Default.GetString(recvBytes, 0, bytes);
rtb_msg.Text += (sendStr+"/n");
rtb_sendMsg.Clear();
rtb_msg.Focus();
rtb_msg.Select(rtb_msg.TextLength, 0);
rtb_sendMsg.Focus();
//rtb_msg.Text += (recvStr+"/n");
//c.Close();
}
**********************************************************************
*服务端
***********************************************************************
protected static Socket serverSocket;
protected Socket clientSocket;
protected Socket s;
private void btn_startServer_Click(object sender, EventArgs e)//启动服务
{
IPEndPoint ipep = new IPEndPoint(IPAddress.Any,2000);
serverSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
serverSocket.Bind(ipep);
serverSocket.Listen(10);
serverSocket.BeginAccept(new AsyncCallback(ReciveData), null);
//serverSocket.
socketState = true;
lbl_state.Text = "服务已开启";
}
private void ReciveData(IAsyncResult asyn)
{
s = serverSocket.EndAccept(asyn);
Byte[] buffer = new Byte[1024];
int bytes;
string recvStr = "";
IPEndPoint clientep = (IPEndPoint)s.RemoteEndPoint;
bytes = s.Receive(buffer, buffer.Length, 0);//从客户端接受信息
recvStr += Encoding.Default.GetString(buffer, 0, bytes);
Invoke(new Action(delegate()
{
rtb_reciveMsg.Text += (recvStr + "/n");
rtb_reciveMsg.SelectionStart = rtb_reciveMsg.Text.Length;
}));
string sendStr = "Server" + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + "/n" + "Ok! Client Send Message Sucessful!";
byte[] bs = Encoding.Default.GetBytes(sendStr);//.ASCII.GetBytes(sendStr);
s.Send(bs, bs.Length, 0);//返回客户端成功信息
serverSocket.BeginAccept(new AsyncCallback(ReciveData), null);
while (true)
{
try
{
int recv = s.Receive(buffer);
string stringdata = Encoding.Default.GetString(buffer, 0, recv);
DateTimeOffset now = DateTimeOffset.Now;
//获取客户端的IP和端口
ip = s.RemoteEndPoint.ToString();
if (stringdata == "STOP")
{
//当客户端终止连接时
Invoke(new Action(delegate()
{
rtb_reciveMsg.Text += (ip + "已从服务器断开/n");
rtb_reciveMsg.Focus();
rtb_reciveMsg.Select(rtb_reciveMsg.TextLength, 0);
rtb_sendMsg.Focus();
}));
break;
}
if (!string.IsNullOrEmpty(stringdata))
{
Invoke(new Action(delegate()
{
rtb_reciveMsg.Text += (ip + now.ToString("G") + "/n" + stringdata + "/n");
rtb_reciveMsg.Focus();
rtb_reciveMsg.Select(rtb_reciveMsg.TextLength, 0);
rtb_sendMsg.Focus();
}));
}
}
catch
{
//当客户端终止连接时
Invoke(new Action(delegate()
{
rtb_reciveMsg.Text += (ip + "已从服务器断开/n");
rtb_reciveMsg.Focus();
rtb_reciveMsg.Select(rtb_reciveMsg.TextLength, 0);
rtb_sendMsg.Focus();
}));
s.Close();
break;
}
}
}
private void btn_stopServer_Click(object sender, EventArgs e)
{
socketState = false;
lbl_state.Text = "服务已关闭";
}
private void btn_sendMsg_Click(object sender, EventArgs e)
{
string sendStr = "Server" + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + "/n" + rtb_sendMsg.Text;
byte[] bs = Encoding.Default.GetBytes(sendStr);//ASCII.GetBytes(sendStr);
s.Send(bs, bs.Length, 0);
rtb_sendMsg.Clear();
}