孙鑫骗了俺?孙鑫视频(网络编程部分)

石乐志123333 2013-02-15 09:42:07
LZ不才,大二寒假想用VC做个简易版监控程序,网络部分就先看着孙鑫老师的视频,很郁闷的是非常认真地看了两遍视频,又在书上做了一堆笔记,自己写的时候不能正常运行。
找错……找不到,索性完全按照视频上一步一步写代码,孙鑫老师讲一句,我在VC上写一句。最后他能正常运行,我不能。服务器端的那个循环是个死循环,就一直循环来着。。。不是说accept是堵塞函数吗?问了同学,他说他按照视频讲的写出来的代码就可以正常运行。更不解,时间一长打击自信。。。求大神细心指导帮忙看下子,是代码的问题还是环境的问题。用的WIN7,VC6,只会VC6。1206503115欢迎师傅们加Q讨论,感激不尽。
以下是服务器端代码(应该和孙鑫版完全一样):
#include<Winsock2.h>
#include<stdio.h>

void main()
{
WORD wVersionRequested;
WSADATA wsaData;
int err;

wVersionRequested = MAKEWORD( 2, 2 );

err = WSAStartup( wVersionRequested, &wsaData );
if ( err != 0 ) {
return;
}

if ( LOBYTE( wsaData.wVersion ) != 2 ||
HIBYTE( wsaData.wVersion ) != 2 ) {
WSACleanup( );
return;
}

SOCKET sockSrv=socket(AF_INET,SOCK_STREAM,0);

SOCKADDR_IN addrSrv;
addrSrv.sin_addr.S_un.S_addr=htonl(INADDR_ANY);
addrSrv.sin_family=AF_INET;
addrSrv.sin_port=htons(6000);

bind(sockSrv,(SOCKADDR*)&addrSrv,sizeof(SOCKADDR));

listen(sockSrv,5);

SOCKADDR_IN addrClient;
int len=sizeof(SOCKADDR);

while(1)
{
SOCKET sockConn=accept(sockSrv,(SOCKADDR*)&addrClient,&len);

char sendBuf[100];
memset(sendBuf,0,100); //加了一句
sprintf(sendBuf,"welcome %s to http://www.sunxin.org",inet_ntoa(addrClient.sin_addr));
send(sockConn,sendBuf,strlen(sendBuf)+1,0);

char recvBuf[100];
memset(recvBuf,0,100); //加了一句
recv(sockConn,recvBuf,100,0);
printf("%s\n",recvBuf);

closesocket(sockConn);
}

}
...全文
32811 51 打赏 收藏 转发到动态 举报
写回复
用AI写文章
51 条回复
切换为时间正序
请发表友善的回复…
发表回复
aixuexidewan 2015-08-31
  • 打赏
  • 举报
回复
楼主,你的MYQQ是在CSDN上下的吗?可以实现功能吗?有源代码吗?求发一份!我也遇到了上面的问题,你现在解决这个问题了吗?求解答。 我改了端口没有效果诶。
帅帅的小皮匠 2015-07-22
  • 打赏
  • 举报
回复
各位楼主,说的都有道理,路过学习了。
Ainuokema 2015-07-18
  • 打赏
  • 举报
回复
仔细阅读,孙鑫写的还是比较严谨的,这个是可以实现的。
ck1n10 2015-04-19
  • 打赏
  • 举报
回复
你在if判断语句里面加一句代码看看是不是 进if语句了。。
松狮MVP 2015-03-30
  • 打赏
  • 举报
回复
怒赞44楼!!!!!!!!!
jogholy 2015-02-07
  • 打赏
  • 举报
回复
100%防火墙……
cmf41013 2014-11-26
  • 打赏
  • 举报
回复
代码应该不会有问题。建议你服务器端和客户端同时单步跟踪调试下。 先运行服务器端,阻塞后,运行客户端,客户端阻塞后再继续单步往下走。 学习的话主要还是理解,理解后不看书也能写出来,理解不了代码运行对了也不知道其中的原理,以后还是不会写,抄错了也不会调试出来笔误
tju_gwp 2014-09-15
  • 打赏
  • 举报
回复
之前我也是这个问题,后来我发现我只是把服务器程序运行了两次,没有运行客户端。
程序没问题,只是运行错了,要把buid框调出来(右键菜单栏空白处->buid)
先选择服务器tcpsrv,运行,然后客户端tcpclient,运行就ok了.


ybxuwei 2014-09-03
  • 打赏
  • 举报
回复
这个程序太垃圾了,都没有错误处理,所以哪里出了问题你根本不知道。
weileshenghuo1 2014-08-28
  • 打赏
  • 举报
回复
楼上说的很有道理,把端口号改为4999,就ok了,我已试过,之前也是死循环的
思仁 2014-06-11
  • 打赏
  • 举报
回复
修改程序中的端口号,就是那个6000,如改为4999,好像就行,试试;
prettychao 2014-02-26
  • 打赏
  • 举报
回复
服务端用动态分配的ip建立,而客户端用127.0.0.1连接,肯定连不上
xhbuming 2013-12-29
  • 打赏
  • 举报
回复
你不会是先打开的Client,后打开的Server吧。。。。
zoey2046 2013-12-19
  • 打赏
  • 举报
回复
难道不是win7运行VC6的问题么,楼主可以试下去XP系统下用VC6.0来运行这个程序。 别人能用你的代码运行成功就说明代码没问题,而是调试环境问题了。 我自己在win7下运行vc6各种蛋疼,换了xp就好了~
bright_2013 2013-12-07
  • 打赏
  • 举报
回复
应该是1.1版本
txfh 2013-11-18
  • 打赏
  • 举报
回复
是不是版本的问题呀 孙鑫老师用的 1.1 版本 而你用的是2.2 我不知道是不是这个原因 但是你可以试一下···
偶尔小高兴 2013-10-19
  • 打赏
  • 举报
回复
楼主 怎么解决了 啊
dadaqq1234 2013-08-28
  • 打赏
  • 举报
回复
引库文件了没?
Luo_Bryant 2013-04-09
  • 打赏
  • 举报
回复
引用 23 楼 qxbailv15 的回复:
要先运行服务器后运行客户端啊
是的。。。
wanhuatong1987 2013-03-20
  • 打赏
  • 举报
回复
你按一下步骤试试:1.你的客户端需要加一个system("pause");让窗口暂停 2.先调试服务器端在调试客户端 3.检查一下有没有忘记加ws_32.lib 我的是XP系统,是因为第一个原因造成的。你的代码没有错,我对了一下。
加载更多回复(31)

16,471

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

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