客户端:
Thread threadClient = null;//客户端 负责接收 服务器发来的数据消息的线程
Socket socketClient = null;//客户端套接字 private void button1_Click(object sender, EventArgs e)
{
//可以把文本IP 转成IP对象
IPAddress address = IPAddress.Parse(txtIP.Text.Trim());
IPEndPoint endpoint = new IPEndPoint(address, int.Parse(txtDuanKou.Text.Trim()));
socketClient = new Socket(AddressFamily.InterNetwork,SocketType.Stream,ProtocolType.Tcp);
//向指定的IP和端口发送连接请求
socketClient.Connect(endpoint); //创建线程 监听服务器 发来的信息
threadClient = new Thread(RecMsg);
threadClient.IsBackground = true;
threadClient.Start();
} //客户端发送信息
private void btnFaShong_Click(object sender, EventArgs e)
{
string xinXi = "ok";
//将要发送的字符串转换UTF8对应的字节数组
byte[] arrMsg = System.Text.Encoding.UTF8.GetBytes(xinXi);
socketClient.Send(arrMsg);
//输出发送信息
ShowMsg("客户端发送的消息:" + xinXi);服务器:
Thread threadWatch = null;//定义一个线程,负责监听客户端连接请求的线程
Socket socketWatch = null;//负责监听的快捷字
Thread jieshou = null;//负责接收数据private void button1_Click(object sender, EventArgs e)
{
//创建负责监听的快捷字,参数(使用IP4寻址协议,使用流逝连接,使用TCP协议传输数据)
socketWatch = new Socket(AddressFamily.InterNetwork, SocketType.Stream,ProtocolType.Tcp);
IPAddress address = IPAddress.Parse(txtIP.Text.Trim()); //创建IP 和端口的网络节点对象
IPEndPoint endpoint = new IPEndPoint(address, int.Parse(txtDuanKou.Text.Trim())); //将负责监听的套接字 绑定到唯一的IP和端口上
socketWatch.Bind(endpoint);
//设置监听队列的长度
socketWatch.Listen(5); //创建负责监听的线程,并传入监听方法
threadWatch = new Thread(WachChonecting); threadWatch.IsBackground = true;//设置为后台线程
threadWatch.Start();//开启线程
ShowMsg("服务器启动监听成功"); //接收数据
jieshou = new Thread(JieShou);
jieshou.IsBackground = true;
jieshou.Start();
ShowMsg("客户端发来的消息");
} //准备一个集合
Dictionary<string, Socket> dict = new Dictionary<string, Socket>();
Socket socketConnection = null; // Socket socketConnection = null;//负责通信的套接字
//为了让线程执行Accept方法,监听客户端请求的方法
void WachChonecting()
{
while (true)//循环是为是了持续不断的新的客户端了连接请求
{
//开始监听客户端 Accept方法,会阻断当前线程
socketConnection = socketWatch.Accept();//一旦监听到客户端的请求,就返回一个负责跟客户端通信的套接字sokConnect
//向里面追加一个项
lbOnline.Items.Add(socketConnection.RemoteEndPoint.ToString()); //将与客户端套接字对象添加到键值对集合中,并与客户端IP端口作为键
dict.Add(socketConnection.RemoteEndPoint.ToString(),socketConnection);
//窗体输出信息
ShowMsg("客户端连接成功"); }
} //循环接收
void JieShou() {
while (true)
{
socketConnection = socketWatch.Accept();//一旦监听到客户端的请求,就返回一个负责跟客户端通信的套接字sokConnect
//定义一个接收的字节数组
byte[] arrMsgJie = new byte[1024];
int length = socketConnection.Receive(arrMsgJie);
string strMsgJie = System.Text.Encoding.UTF8.GetString(arrMsgJie, 0, length);
ShowMsg("接收来的数据:"+strMsgJie);
}
}socket多线程
Thread threadClient = null;//客户端 负责接收 服务器发来的数据消息的线程
Socket socketClient = null;//客户端套接字 private void button1_Click(object sender, EventArgs e)
{
//可以把文本IP 转成IP对象
IPAddress address = IPAddress.Parse(txtIP.Text.Trim());
IPEndPoint endpoint = new IPEndPoint(address, int.Parse(txtDuanKou.Text.Trim()));
socketClient = new Socket(AddressFamily.InterNetwork,SocketType.Stream,ProtocolType.Tcp);
//向指定的IP和端口发送连接请求
socketClient.Connect(endpoint); //创建线程 监听服务器 发来的信息
threadClient = new Thread(RecMsg);
threadClient.IsBackground = true;
threadClient.Start();
} //客户端发送信息
private void btnFaShong_Click(object sender, EventArgs e)
{
string xinXi = "ok";
//将要发送的字符串转换UTF8对应的字节数组
byte[] arrMsg = System.Text.Encoding.UTF8.GetBytes(xinXi);
socketClient.Send(arrMsg);
//输出发送信息
ShowMsg("客户端发送的消息:" + xinXi);服务器:
Thread threadWatch = null;//定义一个线程,负责监听客户端连接请求的线程
Socket socketWatch = null;//负责监听的快捷字
Thread jieshou = null;//负责接收数据private void button1_Click(object sender, EventArgs e)
{
//创建负责监听的快捷字,参数(使用IP4寻址协议,使用流逝连接,使用TCP协议传输数据)
socketWatch = new Socket(AddressFamily.InterNetwork, SocketType.Stream,ProtocolType.Tcp);
IPAddress address = IPAddress.Parse(txtIP.Text.Trim()); //创建IP 和端口的网络节点对象
IPEndPoint endpoint = new IPEndPoint(address, int.Parse(txtDuanKou.Text.Trim())); //将负责监听的套接字 绑定到唯一的IP和端口上
socketWatch.Bind(endpoint);
//设置监听队列的长度
socketWatch.Listen(5); //创建负责监听的线程,并传入监听方法
threadWatch = new Thread(WachChonecting); threadWatch.IsBackground = true;//设置为后台线程
threadWatch.Start();//开启线程
ShowMsg("服务器启动监听成功"); //接收数据
jieshou = new Thread(JieShou);
jieshou.IsBackground = true;
jieshou.Start();
ShowMsg("客户端发来的消息");
} //准备一个集合
Dictionary<string, Socket> dict = new Dictionary<string, Socket>();
Socket socketConnection = null; // Socket socketConnection = null;//负责通信的套接字
//为了让线程执行Accept方法,监听客户端请求的方法
void WachChonecting()
{
while (true)//循环是为是了持续不断的新的客户端了连接请求
{
//开始监听客户端 Accept方法,会阻断当前线程
socketConnection = socketWatch.Accept();//一旦监听到客户端的请求,就返回一个负责跟客户端通信的套接字sokConnect
//向里面追加一个项
lbOnline.Items.Add(socketConnection.RemoteEndPoint.ToString()); //将与客户端套接字对象添加到键值对集合中,并与客户端IP端口作为键
dict.Add(socketConnection.RemoteEndPoint.ToString(),socketConnection);
//窗体输出信息
ShowMsg("客户端连接成功"); }
} //循环接收
void JieShou() {
while (true)
{
socketConnection = socketWatch.Accept();//一旦监听到客户端的请求,就返回一个负责跟客户端通信的套接字sokConnect
//定义一个接收的字节数组
byte[] arrMsgJie = new byte[1024];
int length = socketConnection.Receive(arrMsgJie);
string strMsgJie = System.Text.Encoding.UTF8.GetString(arrMsgJie, 0, length);
ShowMsg("接收来的数据:"+strMsgJie);
}
}socket多线程
当服务器Accept到后,你就在当前线程里去再次开辟一个线程去接收数据。
服务器:
Thread threadWatch = null;//定义一个线程,负责监听客户端连接请求的线程
Socket socketWatch = null;//负责监听的快捷字
Thread jieshou = null;//负责接收数据private void button1_Click(object sender, EventArgs e)
{
//创建负责监听的快捷字,参数(使用IP4寻址协议,使用流逝连接,使用TCP协议传输数据)
socketWatch = new Socket(AddressFamily.InterNetwork, SocketType.Stream,ProtocolType.Tcp);
IPAddress address = IPAddress.Parse(txtIP.Text.Trim()); //创建IP 和端口的网络节点对象
IPEndPoint endpoint = new IPEndPoint(address, int.Parse(txtDuanKou.Text.Trim())); //将负责监听的套接字 绑定到唯一的IP和端口上
socketWatch.Bind(endpoint);
//设置监听队列的长度
socketWatch.Listen(5); //创建负责监听的线程,并传入监听方法
threadWatch = new Thread(WachChonecting); threadWatch.IsBackground = true;//设置为后台线程
threadWatch.Start();//开启线程
ShowMsg("服务器启动监听成功");
/*
//接收数据
jieshou = new Thread(JieShou);
jieshou.IsBackground = true;
jieshou.Start();
ShowMsg("客户端发来的消息");
*/
} //准备一个集合
Dictionary<string, Socket> dict = new Dictionary<string, Socket>();
Socket socketConnection = null; // Socket socketConnection = null;//负责通信的套接字
//为了让线程执行Accept方法,监听客户端请求的方法
void WachChonecting()
{
while (true)//循环是为是了持续不断的新的客户端了连接请求
{
//开始监听客户端 Accept方法,会阻断当前线程
socketConnection = socketWatch.Accept();//一旦监听到客户端的请求,就返回一个负责跟客户端通信的套接字sokConnect
//向里面追加一个项
lbOnline.Items.Add(socketConnection.RemoteEndPoint.ToString()); //将与客户端套接字对象添加到键值对集合中,并与客户端IP端口作为键
dict.Add(socketConnection.RemoteEndPoint.ToString(),socketConnection);
//窗体输出信息
ShowMsg("客户端连接成功");
/*
//接收数据
Thread newth= new Thread(JieShou);//局部开辟线程,不要全局
jieshou.IsBackground = true;
jieshou.Start();
ShowMsg("客户端发来的消息"); }
} //循环接收
void JieShou() {
while (true)
{
socketConnection = socketWatch.Accept();//一旦监听到客户端的请求,就返回一个负责跟客户端通信的套接字sokConnect
//定义一个接收的字节数组
byte[] arrMsgJie = new byte[1024];
int length = socketConnection.Receive(arrMsgJie);
string strMsgJie = System.Text.Encoding.UTF8.GetString(arrMsgJie, 0, length);
ShowMsg("接收来的数据:"+strMsgJie);
}
}
你的代码写的真心乱哪。。