socket客户端里connect内存冲突

q980764821 2015-09-07 10:12:49
//****************************客户端***********************************

#pragma warning(disable: 4996)
#include<stdio.h>
#include<stdlib.h>
#include<WinSock2.h>
#pragma comment(lib,"ws2_32.lib")
void main()
{
WSADATA wsadata;
int iResult = WSAStartup(MAKEWORD(2, 2), &wsadata);
if (iResult != NO_ERROR)
printf("Error at WSAStartup()\n");


SOCKET server;
server = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
if (server == INVALID_SOCKET){
printf("Error at socket():%1d");
WSACleanup();
return;
}

SOCKADDR_IN clientService;
clientService.sin_family = AF_INET;
clientService.sin_addr.s_addr = inet_addr("192.168.1.1");
clientService.sin_port = htons(8080);

if (connect(server, (SOCKADDR*)&clientService, sizeof(SOCKADDR)) ==SOCKET_ERROR){
printf("Failed to connect: %s\n",GetLastError());

WSACleanup();
closesocket(server);

return;
}
/* 不知道是什么原因 */
...全文
126 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
赵4老师 2015-09-08
  • 打赏
  • 举报
回复
崩溃的时候在弹出的对话框按相应按钮进入调试,按Alt+7键查看Call Stack即“调用堆栈”里面从上到下列出的对应从里层到外层的函数调用历史。双击某一行可将光标定位到此次调用的源代码或汇编指令处,看不懂时双击下一行,直到能看懂为止。
www_adintr_com 2015-09-08
  • 打赏
  • 举报
回复
引用 11 楼 q980764821 的回复:
[quote=引用 8 楼 adlay 的回复:] [quote=引用 7 楼 q980764821 的回复:] [quote=引用 4 楼 www_adintr_com的回复:]10061 是目标机器对应的端口没打开,连接不上
端口我在防火墙里设置打开了 但是netstat -查了并没有那个端口 有影响么? 现在还是连不上 10061[/quote] 不光是防火墙打开,得有进程打开了这个端口,在这个端口上等待连接才行的。[/quote] 我服务器端一直开着的啊 还有什么可能会出错吗[/quote] 那你先试下在命令行中 telnet 服务器IP 服务器端口 看是否能连接上,如果不能就是服务器的问题,可以才是客户端的问题。 (如果提示找不到 telnet 命令,在控制面板,添加删除程序,系统组件 里面把 telnet 客户端 选上) 另外,如果你要连本机的话,直接用 127.0.0.1 的 IP 就行了。 如果你是要连 iiiiii.imwork.net 这个域名,你的代码是错的,gethostname 会把名字填成本机的。
Zidane_2014 2015-09-08
  • 打赏
  • 举报
回复
客户端与服务端要对照着看一下。 检查端口打开没有。
www_adintr_com 2015-09-08
  • 打赏
  • 举报
回复
10061 是目标机器对应的端口没打开,连接不上
q980764821 2015-09-08
  • 打赏
  • 举报
回复
引用 8 楼 adlay 的回复:
[quote=引用 7 楼 q980764821 的回复:] [quote=引用 4 楼 www_adintr_com的回复:]10061 是目标机器对应的端口没打开,连接不上
端口我在防火墙里设置打开了 但是netstat -查了并没有那个端口 有影响么? 现在还是连不上 10061[/quote] 不光是防火墙打开,得有进程打开了这个端口,在这个端口上等待连接才行的。[/quote] 我服务器端一直开着的啊 还有什么可能会出错吗
q980764821 2015-09-08
  • 打赏
  • 举报
回复
//****************************客户端*********************************** #pragma warning(disable: 4996) #include<stdio.h> #include<stdlib.h> #include<WinSock2.h> #pragma comment(lib,"ws2_32.lib") void main() { WSADATA wsadata; int iResult = WSAStartup(MAKEWORD(2, 2), &wsadata); if (iResult != NO_ERROR) printf("Error at WSAStartup()\n"); char name[33] = "iiiiii.imwork.net"; //定义用于存放获得的主机名的变量 char *ip; //定义IP地址变量 PHOSTENT hostinfo; if (gethostname(name, sizeof(name)) == 0) { if ((hostinfo = gethostbyname(name)) != NULL) { ip = inet_ntoa(*(struct in_addr *)*hostinfo->h_addr_list); } } printf("%s", ip); SOCKET server; server = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP); if (server == INVALID_SOCKET){ printf("Error at socket():%1d"); WSACleanup(); return; } SOCKADDR_IN clientService; clientService.sin_family = AF_INET; clientService.sin_addr.s_addr = inet_addr(ip); clientService.sin_port = htons(27015); if (connect(server, (SOCKADDR*)&clientService, sizeof(SOCKADDR)) == SOCKET_ERROR){ printf("Failed to connect: %d\n", GetLastError()); getchar(); WSACleanup(); closesocket(server); return; } 这代码比之前的代码多了一个域名解析 因为这帖子在网上查的到所以把域名改了下 。 请问可能会是什么原因呢 ?
q980764821 2015-09-08
  • 打赏
  • 举报
回复
引用 1 楼 adlay 的回复:
printf("Error at socket():%1d"); %ld 的输出没有给参数 printf("Failed to connect: %s\n",GetLastError()); GetLastError 返回的是整数,用 %d 来输出,不是 %s
谢谢 改成%d管了 但是能不能帮我帮到底下 。。现在connect代码10061 可能是什么原因
q980764821 2015-09-08
  • 打赏
  • 举报
回复
后面我回追加30分给大家 希望大家帮我下 。
q980764821 2015-09-08
  • 打赏
  • 举报
回复
10061为目标端口的话
引用 5 楼 Zidane_2014 的回复:
客户端与服务端要对照着看一下。 检查端口打开没有。
我在同一台机子上运行两程序 。27015 端口我在防火墙里打开了 我netstat看了下端口没有27015 运行后还是10061 可能是什么情况呢 。
www_adintr_com 2015-09-08
  • 打赏
  • 举报
回复
引用 7 楼 q980764821 的回复:
[quote=引用 4 楼 www_adintr_com的回复:]10061 是目标机器对应的端口没打开,连接不上
端口我在防火墙里设置打开了 但是netstat -查了并没有那个端口 有影响么? 现在还是连不上 10061[/quote] 不光是防火墙打开,得有进程打开了这个端口,在这个端口上等待连接才行的。
q980764821 2015-09-08
  • 打赏
  • 举报
回复
引用 4 楼 www_adintr_com的回复:
10061 是目标机器对应的端口没打开,连接不上
端口我在防火墙里设置打开了 但是netstat -查了并没有那个端口 有影响么? 现在还是连不上 10061
www_adintr_com 2015-09-07
  • 打赏
  • 举报
回复
printf("Error at socket():%1d"); %ld 的输出没有给参数 printf("Failed to connect: %s\n",GetLastError()); GetLastError 返回的是整数,用 %d 来输出,不是 %s

69,382

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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