c# socket 出现无反应?

ybblack001 2011-07-20 11:13:08
sock之前设置了sock.SetSocketOption(SocketOptionLevel.Tcp, SocketOptionName.NoDelay, true);


int itmp = sock.Receive(buff, iRet, iSendLen, 0);//程序运行到这一步会直接运行.不报错,无法看到返回值,直接
if (itmp <= 0) //跳出Debug模式?
{
return false;
}



我确定有数据等待接收的. 这个是啥情况
...全文
213 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
ybblack001 2011-07-21
  • 打赏
  • 举报
回复
明明抓包显示数据已经到本机了,但是程序还是堵塞在recv函数,可能有什么原因呢?注:我两边的socket都设置了nodelay了.
ybblack001 2011-07-20
  • 打赏
  • 举报
回复
- -! Debug模式存在同样问题..

顺便说下,如果连接IP是127.0.0.1 不会出现这个问题

但如果改成本机的外网IP就会出现..
ybblack001 2011-07-20
  • 打赏
  • 举报
回复
日 傻了 不是Debug模式
wangqianapen 2011-07-20
  • 打赏
  • 举报
回复
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Net.Sockets;
using System.Net;

namespace WindowsFormsApplication7
{
class YBTCPServer
{
Socket serverSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
//绑定端口
IPEndPoint iep = new IPEndPoint(IPAddress.Any, 8090);
public YBTCPServer()
{
serverSocket.Bind(iep);
//开始监听
serverSocket.Listen(10);
//设置异步方法接受客户端连接
serverSocket.BeginAccept(new AsyncCallback(AcceptConn), serverSocket);

serverSocket.Close();
}

void AcceptConn(IAsyncResult iar)
{
byte[] RecvData = new byte[2048];
Socket oldserver = (Socket)iar.AsyncState;
Socket client = oldserver.EndAccept(iar);
//开始接受来自该客户端的数据
client.BeginReceive(RecvData, 0, RecvData.Length, SocketFlags.None, new AsyncCallback(ReceiveData), client);
//继续接受其他客户端的连接
client.BeginAccept(new AsyncCallback(AcceptConn), client);
}

void ReceiveData(IAsyncResult iar)
{
byte[] RecvData = new byte[2048];
string strRecv;
Socket client = (Socket)iar.AsyncState;
int recv = client.EndReceive(iar);
if (recv == 0)
client.Close();
else
{
strRecv = Encoding.Default.GetString(RecvData, 0, recv);
//将接收到的数据再发送给客户端
client.BeginSend(RecvData, 0, recv, SocketFlags.None, new AsyncCallback(SendData), client);
}
//继续接收来自来客户端的数据
client.BeginReceive(RecvData, 0, RecvData.Length, SocketFlags.None, new AsyncCallback(ReceiveData), client);
}

void SendData(IAsyncResult iar)
{
Socket client = (Socket)iar.AsyncState;
int sent = client.EndSend(iar);
}

}
}

110,536

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

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