求一个C#(winform)程序Demo,要求用线程池实现SOCKET通讯,有服务端和客户端。在线等。。

alishuaia 2012-06-26 05:04:18
求一个C#(winform)程序Demo,要求用线程池实现SOCKET通讯,有服务端和客户端。在线等。。各位大侠来解啊!!!
...全文
291 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
__天涯寻梦 2012-06-27
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 的回复:]
2#的不是WinForm的吧。这样的例子我有一个,可是移到窗体下就不能运行了,到Socket sk = sktltn.Accept();程序就暂停,未响应状态,也不报错。愁啊。。有人说让我关闭所有线程,我还是不明白。请指教!
[/Quote]
这是控制台程序
newxdlysk 2012-06-27
  • 打赏
  • 举报
回复
把这段另起一个线程就不会阻塞ui线程了

new Thread(new ThreadStart(delegate{
Socket sktltn = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
sktltn.Bind(new IPEndPoint(IPAddress.Any, 12345));
sktltn.Listen(30);
while (true)
{
Socket sk = sktltn.Accept();
ThreadPool.QueueUserWorkItem(p =>
{
Socket skc = (Socket)sk;
byte[] array = new byte[10240];
int offset = 0;
while (true)
{
int len = skc.Receive(array, offset, array.Length - offset, SocketFlags.None);
if (len == 0)
{
break;
}
offset += len;
}
string content = Encoding.UTF8.GetString(array, 0, offset);
Console.WriteLine("> " + content);
}, sk);
}

})).Start();
alishuaia 2012-06-27
  • 打赏
  • 举报
回复
2#的不是WinForm的吧。这样的例子我有一个,可是移到窗体下就不能运行了,到Socket sk = sktltn.Accept();程序就暂停,未响应状态,也不报错。愁啊。。有人说让我关闭所有线程,我还是不明白。请指教!
缭绕飘渺 2012-06-26
  • 打赏
  • 举报
回复
星星果然不是白来的
顺手就写了一个
__天涯寻梦 2012-06-26
  • 打赏
  • 举报
回复
服务端
using System;
using System.Net;
using System.Net.Sockets;
using System.Text;
using System.Threading;

namespace SocketDemo
{
static class Program
{
static void Main(string[] argv)
{
Socket sktltn = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
sktltn.Bind(new IPEndPoint(IPAddress.Any, 12345));
sktltn.Listen(30);
while (true)
{
Socket sk = sktltn.Accept();
ThreadPool.QueueUserWorkItem(p =>
{
Socket skc = (Socket)sk;
byte[] array = new byte[10240];
int offset = 0;
while (true)
{
int len = skc.Receive(array, offset, array.Length - offset, SocketFlags.None);
if (len == 0)
{
break;
}
offset += len;
}
string content = Encoding.UTF8.GetString(array, 0, offset);
Console.WriteLine("> " + content);
}, sk);
}
}
}
}

客户端
using System;
using System.Net;
using System.Net.Sockets;
using System.Text;

namespace SocketDemo
{
static class Program
{
static void Main()
{
Console.WriteLine("输入文字,回车发送");
while (true)
{
string str = Console.ReadLine();
if (str.Length > 0)
{
Socket sktc = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
sktc.Connect(new IPEndPoint(IPAddress.Parse("127.0.0.1"), 12345));
byte[] bytes = Encoding.UTF8.GetBytes(str);
int offset = 0;
while ((offset += sktc.Send(bytes, offset, bytes.Length - offset, SocketFlags.None)) < bytes.Length) ;
sktc.Close();
}
}
}
}
}
cnfixit 2012-06-26
  • 打赏
  • 举报
回复
http://haley.blog.51cto.com/2280460/409832
这不是么

7,763

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 非技术区
社区管理员
  • 非技术区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧