首页 新闻 会员 周边

C# socket的停止监听与启动监听的方法???

0
悬赏园豆:60 [已解决问题] 解决于 2012-02-23 17:38

// 启动线程 启动监听按钮

private void button1_Click(object sender, EventArgs e)

{

  Thread th = new Thread(new ThreadStart(handleSc));
  th.IsBackground = true;
  th.Start();

}

 

private void handleSc()
{
int port = 8080;
port = System.Convert.ToInt32(strSPort);

string hostIp = "127.0.0.1";
hostIp = textBox4.Text;

IPAddress ip = IPAddress.Parse(hostIp);
IPEndPoint ipe = new IPEndPoint(ip, port);

Socket recvSocket = null;
Socket sS = null;

while (true)
{
try
{
// 创建一个Socket类
sS = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
// 绑定端口
sS.Bind(ipe);
sS.ReceiveTimeout = INT_TIMEOUT;
// 开始监听
sS.Listen(0);

// 为新建连接创建新的Socket
recvSocket = sS.Accept();

............

}

catch(...)

{

 .....

}

}

}

我想在用再拉一个按钮做一个停止监听按钮,实现可以启动监听 又可以停止监听的东西。请各位大虾给出代码 谢谢!  希望不要嫌分少了啊 呵呵 

FiendReam的主页 FiendReam | 初学一级 | 园豆:8
提问于:2012-02-13 20:20
< >
分享
最佳答案
1

我的建议:

1、用TcpListener 作为Socket的产生器,监听端口并将之设为全局变量(可以方便的停止监听)

2、handleSc() 中异步启动监听器,产生TcpClient并”再次“异步执行连接处理数据等操作。

3、如非必要尽量不要另开线程,开销过大。可以用异步即线程池。

参考:

TcpListener listener = new TcpListener(ip, LisenPort);
static void main()
{
Action act=new Action(beginStartService);
act.lisner.BeginInvoke(lisnerCallback, null);
}
private void beginStartService()
{
IPAddress ip = getHostInfo.getIPAddressV4();
listener = new TcpListener(ip, LisenPort);
try
{
listener.Start();
}
catch (Exception ee)
{
MessageBox.Show("没有开始监听,请更改配置后重启程序。"+ee.Message);
return;
}
while (true)
{
TcpClient client=listener.AcceptTcpClient();
//transmissionTaskClass 这是我自己的类不要深究
transmissionTaskClass cc = new transmissionTaskClass(client);
//异步传输数据
cc.beginServerStart();

}


}
//回调函数
private void lisnerCallback(IAsyncResult ar)
{

}
收获园豆:50
为森 | 小虾三级 |园豆:579 | 2012-02-14 00:42
其他回答(1)
0

将socket提取成全局变量,然后在一个button事件中去关闭socket就好了。

收获园豆:10
az235 | 园豆:8483 (大侠五级) | 2012-02-14 09:24
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册