110,534
社区成员
发帖
与我相关
我的任务
分享
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Net.Sockets;
using System.Net;
using System.Threading;
namespace Server
{
public partial class Server : Form
{
private Socket serverSocket;
// private Socket clientSocket;
private Thread receiveThread;
private Thread connectThread;
public Server()
{
InitializeComponent();
Control.CheckForIllegalCrossThreadCalls = false;
}
private void buttonStart_Click(object sender, EventArgs e)
{
IPAddress ip = IPAddress.Parse("127.0.0.1");
IPEndPoint iep = new IPEndPoint(ip, 5555);
this.serverSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
serverSocket.Bind(iep);
serverSocket.Listen(500);
this.connectThread = new Thread(new ThreadStart(this.AcceptConnect));
this.connectThread.Start();
}
private void AcceptConnect()
{
this.serverSocket = this.serverSocket.Accept();
this.serverSocket.Send(Encoding.UTF8.GetBytes("服务器连接成功!\r\n"));
this.receiveThread = new Thread(new ThreadStart(ReceiveMessage));
this.receiveThread.Start();
//this.connectThread.Abort();
}
private void ReceiveMessage()
{
byte[] buf;
try
{
while (true)
{
buf = new byte[512];
this.serverSocket.Receive(buf);
string receiveString = Encoding.UTF8.GetString(buf);
this.textBoxReceive.Text += "客户端说:" + receiveString + "\r\n";
}
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
private void Server_FormClosing(object sender, FormClosingEventArgs e)
{
if (this.receiveThread != null)
this.receiveThread.Abort();
if (this.connectThread != null)
{
//connectThread.Join();
this.connectThread.Abort();
}
}
private void buttonSend_Click(object sender, EventArgs e)
{
byte[] buf = Encoding.UTF8.GetBytes(this.textBoxSend.Text);
this.serverSocket.Send(buf);
}
}
}
while (_isContinue)
{
buf = new byte[512];
this.serverSocket.Receive(buf);
string receiveString = Encoding.UTF8.GetString(buf);
//这里写得有问题,安全机制不允许这样跨线程调用主线程控件。自行度娘修改
this.textBoxReceive.Text += "客户端说:" + receiveString + "\r\n";
}