服务端
服务端代码
Socket client_socket;
Socket serversocket;
Socket testsocket;
private Thread thread;
private Thread th_c;
delegate void SetTextCallBack(string text);
public FrmMain()
{
InitializeComponent();
client_socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
serversocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); ;
}
private void button4_Click(object sender, EventArgs e)
{
EndPoint ep = new IPEndPoint(IPAddress.Any, Convert.ToInt32(txtserverport.Text));
serversocket.Bind(ep);
serversocket.Listen(10);
thread = new Thread(new ThreadStart(ReceiveMsg));
thread.IsBackground = true;
thread.Start();
richTextBox1.Text += "服务启动了\n";
}
public void ReceiveMsg()
{
while (true)
{
Socket socClient = serversocket.Accept();
SetText(socClient.RemoteEndPoint.ToString()+ "已经连接");
ParameterizedThreadStart pts = new ParameterizedThreadStart(HandleClientComm);
Thread thread = new Thread(pts);
thread.IsBackground = true;
thread.Start(socClient);
}
}
private void HandleClientComm(object client) {
Socket tcpClient = (Socket)client;
testsocket = tcpClient;
byte[] buffer = new byte[1024];
int lea;
while (true) {
lea = 0;
lea = tcpClient.Receive(buffer);//接收远程;
string msg = Encoding.UTF8.GetString(buffer, 0, lea);
SetText(msg);
tcpClient.Send(Encoding.UTF8.GetBytes("我收到了"));
}
}
public void SetText(string text)
{
//委托方法一
this.Invoke(new Action(() =>
{
richTextBox1.Text += DateTime.Now.ToString() + "\n" + text + "\n";
}));
//委托方法二
//if (richTextBox1.InvokeRequired)
//{
// SetTextCallBack st = new SetTextCallBack(SetText);
// this.Invoke(st, new object[] { text });
//}
//else
//{
// richTextBox1.Text += DateTime.Now.ToString() + "\n" + text + "\n";
//}
}
客户端
private void button1_Click(object sender, EventArgs e)
{
if (client_socket.Connected)
return;
IPAddress ipAdress = IPAddress.Parse(textBox1.Text);
IPEndPoint ipEndpoint = new IPEndPoint(ipAdress, Convert.ToInt32(textBox2.Text));
try
{
client_socket.Connect(ipEndpoint);
rtbclient.AppendText(DateTime.Now.ToString() + "\n" + "连接成功!" + "\n");
th_c = new Thread(C_ReceiveMsg);
th_c.IsBackground = true;
th_c.Start();
}
catch (Exception)
{
MessageBox.Show("连接出错,请确认服务器端是否打开。");
}
}
private void C_ReceiveMsg()
{
byte[] buffer = new byte[1024];
int lea;
while (true)
{
lea = 0;
lea = client_socket.Receive(buffer);//接收远程;
string msg = Encoding.UTF8.GetString(buffer, 0, lea);
this.Invoke(new Action(()=> {
rtbclient.Text += msg+"\n";
}));
}
}
private void button2_Click(object sender, EventArgs e)
{
if (!client_socket.Connected){
MessageBox.Show("请先连接服务!");
return;
}
string strjson = "这是我的测试";
client_socket.Send(Encoding.UTF8.GetBytes(strjson));
rtbclient.AppendText(DateTime.Now.ToString() + "\n" + strjson + "\n");
}