孙鑫VC++ 网络编程问题

chenxue1111 2013-03-11 06:50:48
按书上过程编写了 服务器端程序和客户端程序进行通信,怎么调试两个工程
服务器端代码

#include <WinSock2.h>
#include <iostream>
#include <stdio.h>
void main()
{
WORD wVersionRequested;
WSADATA wsaData;
int err;
wVersionRequested = MAKEWORD(1,1);
err = WSAStartup(wVersionRequested,&wsaData);
if (err != 0)
{
return;
}

if (LOBYTE(wsaData.wVersion) != 1||
HIBYTE( wsaData.wVersion ) != 1 )
{
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];
sprintf(sendBuf,"s%",inet_ntoa(addrClient.sin_addr));
//发送数据
send(sockConn,sendBuf,strlen(sendBuf)+1,0);
char recvBuf[100];
//接收数据
recv(sockConn,recvBuf,100,0);
//打印
printf("s%\n",recvBuf);
//关闭套接字
closesocket(sockConn);
}
}

客户端代码:

#include <WinSock2.h>
#include <stdio.h>
void main()
{
WORD wVersionRequested;
WSADATA wsaData;
int err;
wVersionRequested = MAKEWORD(1,1);

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

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

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

SOCKADDR_IN addrSrv;
addrSrv.sin_addr.S_un.S_addr = inet_addr("127.0.0.1");
addrSrv.sin_family = AF_INET;
addrSrv.sin_port = htons(6000);

connect(sockClient,(SOCKADDR*)&addrSrv,sizeof(SOCKADDR));

char recvBuf[100];
recv(sockClient,recvBuf,100,0);
printf("s%\n",recvBuf);

send(sockClient,"This is lisi",strlen("This is lisi")+1,0);
closesocket(sockClient);
WSACleanup();
}

问题:
一个解决方案下两个工程,怎么调试,是我调试方法问题吗?
...全文
188 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
woaishuo2011 2013-03-13
  • 打赏
  • 举报
回复
就用两个vs一起调啊..打断点啥的...
夏梦c 2013-03-12
  • 打赏
  • 举报
回复
引用 2 楼 gpshq 的回复:
开两个VS,先调试运行server,再调试运行client
两个vs 一起调
mujiok2003 2013-03-12
  • 打赏
  • 举报
回复
"s%"全部换成"%s"吧,太粗心了。
chenxue1111 2013-03-12
  • 打赏
  • 举报
回复
引用 5 楼 mujiok2003 的回复:
你发送的缓冲区,没有初始化为字符串, 所以还是按字节发送吧。 C/C++ code?12//send(sockConn,sendBuf,strlen(sendBuf)+1,0);send(sockConn,sendBuf,sizeof(sendBuf),0);
啥意思
ForestDB 2013-03-12
  • 打赏
  • 举报
回复
服务器端是个死循环,所以会一直在那里; 客户端可以开个cmd窗口执行,那么程序结束,窗口还在,就能看到了 或者在客户端程序结尾加上system("pause");或者getchar();这样的语句,那么从IDE中,也会暂停。
mujiok2003 2013-03-12
  • 打赏
  • 举报
回复
引用 5 楼 mujiok2003 的回复:
你发送的缓冲区,没有初始化为字符串, 所以还是按字节发送吧。 C/C++ code?12//send(sockConn,sendBuf,strlen(sendBuf)+1,0);send(sockConn,sendBuf,sizeof(sendBuf),0);
忽略!
mujiok2003 2013-03-12
  • 打赏
  • 举报
回复
你发送的缓冲区,没有初始化为字符串, 所以还是按字节发送吧。

//send(sockConn,sendBuf,strlen(sendBuf)+1,0);
send(sockConn,sendBuf,sizeof(sendBuf),0);
mujiok2003 2013-03-12
  • 打赏
  • 举报
回复
写日志吧,单步调试线程/进程间通信不容易,尤其是程序变得复杂后。 确保:怎么写/发送,就怎么读/接收。 小心字节序,内存对齐等问题。
chenxue1111 2013-03-12
  • 打赏
  • 举报
回复
引用 1 楼 ForestDB 的回复:
先启动服务器端的exe,再启动客户端的exe
这样子的话 不能调试的,都是一闪而过的那种
氰客 2013-03-12
  • 打赏
  • 举报
回复
开两个VS,先调试运行server,再调试运行client
ForestDB 2013-03-11
  • 打赏
  • 举报
回复
先启动服务器端的exe,再启动客户端的exe

33,311

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 新手乐园
社区管理员
  • 新手乐园社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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