Socket sock = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
IPEndPoint ipe = new IPEndPoint(IPAddress.Parse("192.168.1.234"), 11100);
sock.Connect(ipe);
string s = "欢迎光临";
byte[] msg = Encoding.UTF8.GetBytes(s);
sock.Send(msg);
我想做一个Tcp长连接,所以发送消息后,没有把sock关闭,第一次发送时服务器能接收到,但是,我在下面的继续调用sock.Send(msg);服务器却没有收到消息,请问这是怎么回事?服务器要怎样才能正常的接受数据?服务器端接收的代码如下:
string data = "";
byte[] bytes = new Byte[1024];
IPHostEntry ipHostInfo = Dns.Resolve(Dns.GetHostName());
IPAddress ipAddress = ipHostInfo.AddressList[0];
IPEndPoint localEndPoint = new IPEndPoint(ipAddress, 11100);
Socket listener = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
try
{
listener.Bind(localEndPoint);
listener.Listen(10);
while (true)
{
Socket handler = listener.Accept();
bytes = new byte[1024];
int bytesRec = handler.Receive(bytes);
data = Encoding.UTF8.GetString(bytes, 0, bytesRec);
}
.......
IPEndPoint ipe = new IPEndPoint(IPAddress.Parse("192.168.1.234"), 11100);
sock.Connect(ipe);
string s = "欢迎光临";
byte[] msg = Encoding.UTF8.GetBytes(s);
sock.Send(msg);
我想做一个Tcp长连接,所以发送消息后,没有把sock关闭,第一次发送时服务器能接收到,但是,我在下面的继续调用sock.Send(msg);服务器却没有收到消息,请问这是怎么回事?服务器要怎样才能正常的接受数据?服务器端接收的代码如下:
string data = "";
byte[] bytes = new Byte[1024];
IPHostEntry ipHostInfo = Dns.Resolve(Dns.GetHostName());
IPAddress ipAddress = ipHostInfo.AddressList[0];
IPEndPoint localEndPoint = new IPEndPoint(ipAddress, 11100);
Socket listener = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
try
{
listener.Bind(localEndPoint);
listener.Listen(10);
while (true)
{
Socket handler = listener.Accept();
bytes = new byte[1024];
int bytesRec = handler.Receive(bytes);
data = Encoding.UTF8.GetString(bytes, 0, bytesRec);
}
.......
解决方案 »
- 如何让程序开机运行(不是在启动项中)
- 怎么通过编程实现[分级审查][许可站点]的增加删除?怎么实现远程控制上网?
- asp.net和JS的嵌套
- 关于计算机上两个程序同时读取同一个串口数据的问题
- 关于axWebBrowser控件实现浏览器,能否用程序模拟点击页面中的按钮,以实现自动注册??
- 谁有Visual C# 2005 Express Edition Beta 2的Activation Key???????
- C# mshtml 实现模拟点击a标签
- 如何能得到两个DateTime类型数据的相差天数?
- treeview 怎么关联两张表
- 用C#写的东东,怎么样才能在没有装.NET的机子里运行,请教高手
- winform datagridview 不能得到更新后的数据
- 关于程序代码的优化问题!
只有再有新的连接进入时,才会向下进行.你调试下就知道了.
或者你在加个线程专门
recieveData
建议有异步的socket来做,比较通用,
那这样不是先要监听客户端发来的连接请求,再用异步socket去监听这个客户端发送来的数据?也就是说每连接一个客户端就要新建一个socket异步读取它发送的数据,是这样的吗?
Socket _Socket = null;
Thread _Thread; private void BeginListen()
{
、、、、、、相关接受处理
}
// 清理所有正在使用的资源. protected override void Dispose(bool disposing)
{ try
{ _Socket.Close();//释放资源
_Thread.Abort();//中止线程 } catch { }
if (disposing)
{
if (components != null)
{ components.Dispose(); } } base.Dispose(disposing); } //启动监听
private void button2_Click(object sender, EventArgs e)
{
try
{
_Thread = new Thread(new ThreadStart(BeginListen));
_Thread.Start();
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
只有再有新的连接进入时,才会向下进行.你调试下就知道了.
或者你在加个线程专门
recieveData
建议有异步的socket来做,比较通用,---------
都回答了,难道是没看到么?
string data = "";
byte[] bytes = new Byte[1024];
IPHostEntry ipHostInfo = Dns.Resolve(Dns.GetHostName());
IPAddress ipAddress = ipHostInfo.AddressList[0];
IPEndPoint localEndPoint = new IPEndPoint(ipAddress, 11100);
Socket listener = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
try
{
listener.Bind(localEndPoint);
listener.Listen(10);
while (true)
{
allDone.Reset();
listener.BeginAccept(new AsyncCallback(AcceptCallback), listener);
allDone.WaitOne();
}
}
剩下的就不贴了 太长了
改成handler.BeginReceive(...);