客户端给服务器端发送信息,服务器接受不到~请大神帮忙 !有可能是颜色的部分出错,帮忙找下啊 大神
客户端: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);
}
}
你的代码写的真心乱哪。。 --------------------编程问答-------------------- 谢谢啊!麻烦你了^.^ --------------------编程问答-------------------- 顺便问一下,怎么把用字符数组传送,改成用流的形式传送数据?
补充:.NET技术 , C#