易码技术论坛

 找回密码
 加入易码
搜索
查看: 1092|回复: 1

[求助] 谁能帮我看看这很简单的socket程序哪错了

[复制链接]
发表于 2009-2-3 23:10:59 | 显示全部楼层 |阅读模式
完成的功能非常简单,发送方(Sender.exe)发送"Hello?"到接收方(Receiver.exe),接收方显示之.
  1. Sender.cpp:
  2. #include <windows.h>

  3. #pragma comment(lib,"WS2_32.lib")

  4. #include <stdio.h>

  5. int main() {
  6.         WSADATA wsaData;
  7.         WORD sockVersion = MAKEWORD(2,0);
  8.         WSAStartup(sockVersion,&wsaData);

  9.         char str[20];
  10.         puts("IP address: ");
  11.         gets(str);

  12.         sockaddr_in remoteAddr;
  13.         remoteAddr.sin_family = AF_INET;
  14.         remoteAddr.sin_addr.S_un.S_addr = inet_addr(str);
  15.         remoteAddr.sin_port = htons(80);

  16.         SOCKET senderSocket = socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);
  17.         connect(senderSocket,(LPSOCKADDR)&remoteAddr,sizeof(remoteAddr));

  18.         char buf[] = "Hello?";
  19.         send(senderSocket,buf,sizeof(buf) - 1,0);

  20.         getchar();
  21.         closesocket(senderSocket);

  22.         WSACleanup();

  23.         return 0;
  24. }
复制代码
  1. Receiver.cpp:
  2. #include <windows.h>

  3. #pragma comment(lib,"WS2_32.lib")

  4. #include <stdio.h>

  5. int main() {
  6.         WSADATA wsaData;
  7.         WORD sockVersion = MAKEWORD(2,0);
  8.         WSAStartup(sockVersion,&wsaData);

  9.         sockaddr_in localAddr;
  10.         localAddr.sin_family = AF_INET;
  11.         localAddr.sin_addr.S_un.S_addr = htonl(INADDR_ANY);
  12.         localAddr.sin_port = htons(80);

  13.         SOCKET listenerSocket = socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);
  14.         bind(listenerSocket,(LPSOCKADDR)&localAddr,sizeof(sockaddr_in));
  15.         listen(listenerSocket,1);

  16.         sockaddr_in remoteAddr;
  17.         int nRemoteAddrLen = sizeof(sockaddr_in);
  18.         SOCKET sessionSocket = accept(listenerSocket,(LPSOCKADDR)&remoteAddr,&nRemoteAddrLen);

  19.         char buf[100];
  20.         int receivedLen = recv(sessionSocket,buf,sizeof(buf),0);
  21.         buf[receivedLen] = '\0';

  22.         printf("Received from %s: %s\n",inet_ntoa(remoteAddr.sin_addr),buf);
  23.         getchar();

  24.         closesocket(sessionSocket);
  25.         closesocket(listenerSocket);

  26.         WSACleanup();

  27.         return 0;
  28. }
复制代码
在两台电脑上分别运行,接收方就是接收不到,而使用127.0.0.1在本地试了倒能产生正确结果.
谢谢.
编译成的程序在附件里,以供方便

[ 本帖最后由 Lumj 于 2009-2-3 23:19 编辑 ]

TrySocket.rar

47.2 KB, 下载次数: 242

发表于 2009-2-17 15:28:45 | 显示全部楼层
端口的问题吧 你换用5000以上的端口试试
您需要登录后才可以回帖 登录 | 加入易码

本版积分规则

Archiver|手机版|小黑屋|EMAX Studio

GMT+8, 2024-4-27 03:05 , Processed in 0.011691 second(s), 21 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表