关于 SOCKET 通讯的问题。。谢谢

l171147904 2010-04-26 10:00:48
我发送一个消息到服务器,服务器给我回发消息!
我需要接收服务器回发消息,,,
服务器:192.168.188.232:2010
我应该监听 哪个IP呢?

我向服务器192.168.188.232:2010发送消息过去,
sendSocket.Connect(192.168.188.232, 2010);
sendSocket.Send(buffer);
sendSocket.Shutdown(SocketShutdown.Both);
sendSocket.Close();
服务器(软件)自动回发消息回来!

我需要做的是 监听,抓取服务器回发的消息!
我监听应该连接到哪个IP上 监听?
我监听 receiveSocket.Connect(192.168.188.232, 2010);
receiveSocket.Listen(10);//报错误:已经连接的套接字上做了一个连接
...全文
195 25 打赏 收藏 转发到动态 举报
写回复
用AI写文章
25 条回复
切换为时间正序
请发表友善的回复…
发表回复
l171147904 2010-04-26
  • 打赏
  • 举报
回复
[Quote=引用 16 楼 dragonforfly 的回复:]
我向服务器192.168.188.232:2010发送消息过去,
sendSocket.Connect(192.168.188.232, 2010);
sendSocket.Send(buffer);
sendSocket.Shutdown(SocketShutdown.Both);
sendSocket.Close();
服务器(软件)自动回发消息回来!

如果你的客户端都断开了连……
[/Quote]

请看15楼谢谢。。。
Alden 2010-04-26
  • 打赏
  • 举报
回复
我向服务器192.168.188.232:2010发送消息过去,
sendSocket.Connect(192.168.188.232, 2010);
sendSocket.Send(buffer);
sendSocket.Shutdown(SocketShutdown.Both);
sendSocket.Close();
服务器(软件)自动回发消息回来!

如果你的客户端都断开了连接,当然收不到服务端的回应了。
l171147904 2010-04-26
  • 打赏
  • 举报
回复
#13楼 谢谢! 我那么写,只是方便 了解!
连接自然成功,不成功我怎么发数据?

又哪来的提示:已经连接的套接字上做了一个连接


现在碰到另一个问题:数据发送,按协议操作!我若不按协议发送数据过去!
第一,接收数据为0,并且一切正常!(准确的)
再发一数据,sendSocket.Receive(bytes, bytes.Length, 0);//报错:计算机主机软件已经关闭一个连接(但我确实没关闭)

代码如下:
sendSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
sendSocket.Connect(“192.168.188.232”, 2010);
函数A
{
byte[] buffer= ***我的数据
sendSocket.Send(buffer);
}
函数B
{
try
{
while (true)
{
bool con = false;
List<byte> listBytes = new List<byte>();//装载接收数据
while (true)
{

byte[] bytes = new byte[sendSocket.ReceiveBufferSize];
int data = sendSocket.Receive(bytes, bytes.Length, 0);//问题在这里
。。。。。。。。。。。
}
zhehan54 2010-04-26
  • 打赏
  • 举报
回复
sendSocket.Listen(10);
这个应该是用在Server上的吧
upc_xiaowei 2010-04-26
  • 打赏
  • 举报
回复
很明显你的语法有问题啊
IPEndPoint ipep=new IPEndPoint(("192.168.188.232"),2010);//你确定服务器的port是2010?并且没被操作系统占用?
socket sendsocket =
new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
//sendSocket.Listen(10); 这句是服务器的语句,客户机不应有
sendsocket.connect(ipep);
label1.text="连接成功";//成功则显示,否则是服务器不发数据,或连接错误
sendsocket.send(buff1);
label1.text="已发送";
int recv=sendsock.receive(buff2,0,buff.length);
label1.text="收到"+recv.tostring()+"字节";
Justin-Liu 2010-04-26
  • 打赏
  • 举报
回复
你google一个Socket通信的例子 网上有好多啊
l171147904 2010-04-26
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 lianshaohua 的回复:]
一个连接就可以实现收/发数据了,这样的例子也不少的,
[/Quote]
说的好! 能找个例子吗? 或者解答下我哪里错了!

sendSocket.Connect(192.168.188.232, 2010);

sendSocket.Send(buffer);
Thread.Sleep(1000);

sendSocket.Listen(10); //错误:在已经连接的套接字上做了一个连接
Socket tmpSocket = sendSocket.Accept();
//我屏蔽掉上面两语句 Listen和Accept

byte[] bytes = new byte[300 * 1024];//存放每次接收到的数据 300 * 1024
int data = sendSocket.Receive(bytes, bytes.Length, 0); //报错,接收不到数据
ztenv 2010-04-26
  • 打赏
  • 举报
回复
一个连接就可以实现收/发数据了,这样的例子也不少的,
willyouasd 2010-04-26
  • 打赏
  • 举报
回复
做个异步吧
l171147904 2010-04-26
  • 打赏
  • 举报
回复
恩!我改成用 sendSocket 来接收了,

sendSocket.Connect(192.168.188.232, 2010);
sendSocket.Send(buffer);

sendSocket.Listen(10); //错误:在已经连接的套接字上做了一个连接
Socket tmpSocket = sendSocket.Accept();
  • 打赏
  • 举报
回复
你应该用sendSocket对象来Receive。
l171147904 2010-04-26
  • 打赏
  • 举报
回复
服务器一个软件,你给他发送 消息,它就给你回发消息!

我需要写的监听接收到 回发给客户端的消息!

我建立了连接,把消息发过去了!
sendSocket.Connect(192.168.188.232, 2010);
sendSocket.Send(buffer);
sendSocket.Shutdown(SocketShutdown.Both);
sendSocket.Close();

我现在该如何 接收到 它回发给我的消息。。。谢谢
pam 2010-04-26
  • 打赏
  • 举报
回复
我现在的做法是在客户端也开一个端口,然后服务器端发送回数据,好像很傻是吧。。。

wosizy 2010-04-26
  • 打赏
  • 举报
回复
我监听 receiveSocket.Connect(192.168.188.232, 2010);
receiveSocket.Listen(10);//报错误:已经连接的套接字上做了一个连接


端口冲突了???
l171147904 2010-04-26
  • 打赏
  • 举报
回复
哦,谢谢 sp老师。。。不需要设置,那我这里该如何 写,才能接收到 服务器回发的数据?
  • 打赏
  • 举报
回复
都是想当然地搞什么 sendSocket、receiveSocket把自己绕进去了。
  • 打赏
  • 举报
回复
不需要设置,你多虑了。当你Connect的时候,socket就已经知道要处理哪一个远程endpoint了。
upc_xiaowei 2010-04-26
  • 打赏
  • 举报
回复
你的程序好乱啊;
1,socket 连接
1,函数a
3,函数b
你的1,放在哪个函数里了?
a和b能访问到吗?
第一,接收数据为0,并且一切正常!(准确的)
再发一数据,sendSocket.Receive(bytes, bytes.Length, 0);//报错:计算机主机软件已经关闭一个连接(但我确实没关闭)
上面你说的,你接受到了字符0,还是什么也没收到啊?
你的函数b的while里面哪有“再发一数据”啊?
l171147904 2010-04-26
  • 打赏
  • 举报
回复
我在 接收数据前加入 if (sendSocket.Available == 0){返回}

第一次进函数A 发送消息,进函数B 接收 if (sendSocket.Available == 0){返回}
第二次。。。 也一样的正常

当第3次,进A函数发送消息时候,sendSocket.Send(buffer);
//错误:计算机主机软件已经关闭一个连接

为什么发送几次之后,连接会关闭;首先我代码无去关闭连接
是否需要设置什么?如何判断连接已经关闭?
yuanhuiqiao 2010-04-26
  • 打赏
  • 举报
回复
加载更多回复(5)

110,539

社区成员

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

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

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