C# winform tcp连接怎么设置非阻塞模式?
答案:2 悬赏:20 手机版
解决时间 2021-02-07 19:41
- 提问者网友:了了无期
- 2021-02-07 01:54
网上VB和java的例子很多,先下所遇到的问题是TCP连接时发生的服务器端阻塞,求问如何设置为非阻塞模式?
最佳答案
- 五星知识达人网友:蕴藏春秋
- 2021-02-07 02:47
采用异步发送方式,可以消除阻塞
全部回答
- 1楼网友:拜訪者
- 2021-02-07 03:00
把下面所有出现ip:192.168.1.190的地方全部改成你的地址!!!
这个是纯控制台的,另外我这还有窗体的!你要就联系我!!
服务器端:
using system;
using system.collections.generic;
using system.linq;
using system.text;
using system.net;
using system.net.sockets;
namespace s1
{
class program
{
static void main(string[] args)
{
try
{
// 把ip地址转换为ipaddress的实例
ipaddress ipad = ipaddress.parse("192.168.1.192");
// 初始化监听器, 端口为8001
tcplistener mylist = new tcplistener(ipad, 8001);
// 开始监听服务器端口
mylist.start();
// 输出服务器启动信息
console.writeline("在8001端口启动服务...");
console.writeline("本地节点为:" + mylist.localendpoint);
console.writeline("等待连接.....");
// 等待处理接入连接请求
// 新建立的连接用套接字s表示
socket s = mylist.acceptsocket();
console.writeline("连接来自 " + s.remoteendpoint);
// 接收客户端信息
byte[] b = new byte[100];
int k = s.receive(b);
console.writeline("已接收...");
for (int i = 0; i < k; i++)
{
console.write(convert.tochar(b[i]));
}
// 处理客户端请求,给客户端回应
asciiencoding asen = new asciiencoding();
s.send(asen.getbytes("the string was recieved by the server."));
console.writeline("\n已发送回应信息");
// 善后工作,释放资源
s.close();
mylist.stop();
}
catch (exception e)
{
console.writeline("error..... " + e.stacktrace);
}
}
}
}
客户端:
using system;
using system.collections.generic;
using system.linq;
using system.text;
using system.net;
using system.net.sockets;
using system.io;
namespace c1
{
class program
{
static void main(string[] args)
{
try
{
tcpclient myclient=new tcpclient();
console.writeline("连接服务器................");
myclient.connect("192.168.1.192",8001);
console.writeline("已连接........");
console.writeline("请输入要传送的字符串");
string str=console.readline();
stream mstream=myclient.getstream();
asciiencoding myasc=new asciiencoding();
byte[] ba=myasc.getbytes(str);
console.writeline("传送中..............");
mstream.write(ba,0,ba.length);
byte[] bb=new byte[50];
int k=mstream.read(bb,0,50);
for (int i=0;i<50 ;i++ ) {
console.write(convert.tochar(bb[i]));
}
myclient.close();
}
catch(exception e)
{
console.writeline("something wrong: "+e.message);
}
console.readkey();
}
}
}
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯