分为服务器端和客户端2部分
现在的问题是:第一次开启服务器和客户端运行正常,重新启动客户端,不关掉服务器,再连接服务器端就无法收到客户端的发送的消息。
下面是关键部分代码:
点击此BUTTON,开始侦听:
private void button1_Click(object sender, System.EventArgs e)
{
thThreadRead = new Thread ( new ThreadStart( Listen ) ) ;
//以Listen过程来初始化Thread实例
thThreadRead.Start ( ) ;
//启动线程
button1.Enabled = false ; }
下面是具体处理部分:
private void Listen()
{
try
{
IPAddress localAddr = IPAddress.Parse(textBox1.Text.Trim());
tlTcpListen = new TcpListener( localAddr, port ) ;
//以8000端口号来初始化TcpListener实例
tlTcpListen.Start ( ) ;
//开始监听网络的连接请求
statusBar1.Text = "正在监听..." ;
stRead = tlTcpListen.AcceptSocket ( ) ;
//通过连接请求,并获得接收数据时使用的Socket实例
EndPoint tempRemoteEP = stRead.RemoteEndPoint ;
IPEndPoint tempRemoteIP = ( IPEndPoint ) tempRemoteEP ;
//获取请求的远程计算机名称
IPHostEntry host = Dns.GetHostByAddress
( tempRemoteIP.Address ) ;
string sHostName = host.HostName ;
statusBar1.Text = "已经连接!" ;
//循环侦听
while ( blistener )
{
string sTime = DateTime.Now.ToShortTimeString ( ) ;
//获取接收数据时的时间
Byte [ ] byRead =new Byte [ 80 ] ;
int iRead = stRead.ReceiveFrom
( byRead , ref tempRemoteEP ) ;
//获得接收的字节数目
Byte [ ] byText = new Byte [ iRead ] ;
//并根据接收到的字节数目来定义字节数组
Array.Copy ( byRead , 0 , byText , 0 , iRead ) ;
//获得的IP地址
string sTemp = System.Text.Encoding.Default.GetString ( byText ) ;
//判断是否为断开连接控制码
if ( sTemp.Trim ( ) == "STOP" )
{
// stRead.Close ( ) ;
// tlTcpListen.Stop ( ) ;
//关闭侦听
statusBar1.Text = "连接已经关闭!" ;
thThreadRead.Abort ( ) ;
//中止线程
// return ;
}
}
}
请热心的朋友帮忙看看,谢谢
现在的问题是:第一次开启服务器和客户端运行正常,重新启动客户端,不关掉服务器,再连接服务器端就无法收到客户端的发送的消息。
下面是关键部分代码:
点击此BUTTON,开始侦听:
private void button1_Click(object sender, System.EventArgs e)
{
thThreadRead = new Thread ( new ThreadStart( Listen ) ) ;
//以Listen过程来初始化Thread实例
thThreadRead.Start ( ) ;
//启动线程
button1.Enabled = false ; }
下面是具体处理部分:
private void Listen()
{
try
{
IPAddress localAddr = IPAddress.Parse(textBox1.Text.Trim());
tlTcpListen = new TcpListener( localAddr, port ) ;
//以8000端口号来初始化TcpListener实例
tlTcpListen.Start ( ) ;
//开始监听网络的连接请求
statusBar1.Text = "正在监听..." ;
stRead = tlTcpListen.AcceptSocket ( ) ;
//通过连接请求,并获得接收数据时使用的Socket实例
EndPoint tempRemoteEP = stRead.RemoteEndPoint ;
IPEndPoint tempRemoteIP = ( IPEndPoint ) tempRemoteEP ;
//获取请求的远程计算机名称
IPHostEntry host = Dns.GetHostByAddress
( tempRemoteIP.Address ) ;
string sHostName = host.HostName ;
statusBar1.Text = "已经连接!" ;
//循环侦听
while ( blistener )
{
string sTime = DateTime.Now.ToShortTimeString ( ) ;
//获取接收数据时的时间
Byte [ ] byRead =new Byte [ 80 ] ;
int iRead = stRead.ReceiveFrom
( byRead , ref tempRemoteEP ) ;
//获得接收的字节数目
Byte [ ] byText = new Byte [ iRead ] ;
//并根据接收到的字节数目来定义字节数组
Array.Copy ( byRead , 0 , byText , 0 , iRead ) ;
//获得的IP地址
string sTemp = System.Text.Encoding.Default.GetString ( byText ) ;
//判断是否为断开连接控制码
if ( sTemp.Trim ( ) == "STOP" )
{
// stRead.Close ( ) ;
// tlTcpListen.Stop ( ) ;
//关闭侦听
statusBar1.Text = "连接已经关闭!" ;
thThreadRead.Abort ( ) ;
//中止线程
// return ;
}
}
}
请热心的朋友帮忙看看,谢谢
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货