为什么客户端和服务器连不上?

hzhm1985 2006-07-27 02:24:50
server.cpp:
#include <stdio.h>
#include "StdAfx.h"
#define SERV_TCP_PORT 6000
#define SERV_HOST_ADDR "192.168.1.67"
int sockfd;

DWORD ClientThread(void *pVoid)
{
int nRet;
char szBuf[1024];
memset(szBuf, 0, sizeof(szBuf));
/*接收来自客户端的数据信息*/
nRet = recv((SOCKET )pVoid,szBuf,sizeof(szBuf),0);

if (nRet == INVALID_SOCKET)
{
printf("recv()");
closesocket(sockfd);
closesocket((SOCKET)pVoid);
return 0;
}
/*显示接收到的数据*/
printf("\nData received: %s\n", szBuf);
/* 发送数据给客户端*/
strcpy(szBuf, "From the Server"); // 发送内容
nRet = send((SOCKET)pVoid, szBuf,strlen(szBuf),0);

closesocket((SOCKET)pVoid);
return 0;
}

int main()
{
int clilen;
int pHandle=-1;
struct sockaddr_in serv_addr;
SOCKET socketClient;
DWORD ThreadAddr;
HANDLE dwClientThread;
SOCKADDR_IN SockAddr;
/*初始化Winsock API*/
WORD wVersionRequested = MAKEWORD(1, 1);
WSADATA wsaData;
if (WSAStartup(wVersionRequested, &wsaData)) {
printf("WSAStartup failed %s\n", WSAGetLastError());
return -1;
}
/*打开一个TCP SOCKET */
if((sockfd=socket(AF_INET, SOCK_STREAM,0))<0)
printf("server:can't open stream socker\n");
/*绑定本地地址,以便客户端连接*/
memset((char *)&serv_addr,0,sizeof(struct sockaddr_in));
serv_addr.sin_family=AF_INET;
serv_addr.sin_addr.s_addr=htonl(INADDR_ANY);
serv_addr.sin_port=htons(SERV_TCP_PORT);
if(bind(sockfd,(struct sockaddr *)&serv_addr, sizeof(serv_addr))<0)
printf("server: can't bind local address");

listen(sockfd,5);

while(1)
{

clilen = sizeof(SOCKADDR_IN);
socketClient = accept(sockfd,
(LPSOCKADDR)&SockAddr,
&clilen);
/*出错处理*/
if (socketClient == INVALID_SOCKET)
{
printf("accept failed!\n");
break;
}

printf("Connection accepted on socket:%d from:%s\n",
socketClient,
inet_ntoa(SockAddr.sin_addr));
/*启动一个新线程处理该请求*/
dwClientThread =CreateThread(NULL,
0,
(LPTHREAD_START_ROUTINE)&ClientThread,
(void *)socketClient,
0,
&ThreadAddr);

if(!dwClientThread)
printf("Cannot start client thread...");
/*线程建立以后,主程序里不再使用线程handle,将其关闭,但线程继续运行*/
CloseHandle((HANDLE)dwClientThread);
}

WSACleanup();
return 0;
}

client.cpp


#include "stdafx.h"
#include <stdio.h>
#define SERV_TCP_PORT 6000
#define SERV_HOST_ADDR "192.168.1.67"
int sockfd;

int main()
{
// 创建套节字
SOCKET s = ::socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
if(s == INVALID_SOCKET)
{
printf(" Failed socket() \n");
return 0;
}


// 填写远程地址信息
sockaddr_in servAddr;
servAddr.sin_family = AF_INET;
servAddr.sin_port = htons(4567);
// 注意,这里要填写服务器程序(TCPServer程序)所在机器的IP地址
// 如果你的计算机没有联网,直接使用127.0.0.1即可
servAddr.sin_addr.S_un.S_addr = inet_addr("127.0.0.1");

if(::connect(s, (sockaddr*)&servAddr, sizeof(servAddr)) == -1)
{
printf(" Failed connect() \n");
return 0;
}

// 接收数据
char buff[256];
int nRecv = ::recv(s, buff, 256, 0);
if(nRecv > 0)
{
buff[nRecv] = '\0';
printf(" 接收到数据:%s", buff);
}

// 关闭套节字
::closesocket(s);
return 0;
}
...全文
443 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
hzhm1985 2006-07-28
  • 打赏
  • 举报
回复
改了,还是不行
sunj_study 2006-07-28
  • 打赏
  • 举报
回复
client

// 填写远程地址信息
sockaddr_in servAddr;
servAddr.sin_family = AF_INET;
servAddr.sin_port = htons(SERV_TCP_PORT); // 改
servAddr.sin_addr.S_un.S_addr = inet_addr(SERV_HOST_ADDR); // 改


要和服务器端对应起来。
sunj_study 2006-07-28
  • 打赏
  • 举报
回复
服务器监听的端口是6000,客户端连接的端口是4567,我晕。。。
sunj_study 2006-07-28
  • 打赏
  • 举报
回复
/*启动一个新线程处理该请求*/
dwClientThread =CreateThread(NULL,
0,
(LPTHREAD_START_ROUTINE)&ClientThread,
(void *)&socketClient, // 注意这里,要传指针的,少个取地址符
0,
&ThreadAddr);

对应的线程函数里对socket参数的调用也要改。
hzhm1985 2006-07-28
  • 打赏
  • 举报
回复
......
hzhm1985 2006-07-27
  • 打赏
  • 举报
回复
哪位高手讲讲!
hzhm1985 2006-07-27
  • 打赏
  • 举报
回复
还是没反映?!能说具体点吗?
laofang 2006-07-27
  • 打赏
  • 举报
回复
服务器绑定的是:
serv_addr.sin_addr.s_addr=htonl(INADDR_ANY);
serv_addr.sin_port=htons(SERV_TCP_PORT);
客户端连接的是:
servAddr.sin_port = htons(4567);
// 注意,这里要填写服务器程序(TCPServer程序)所在机器的IP地址
// 如果你的计算机没有联网,直接使用127.0.0.1即可
servAddr.sin_addr.S_un.S_addr = inet_addr("127.0.0.1");
端口不一样肯定连接不上,而且还不知你本机IP是不是与SERV_TCP_ADDR一致。

要在你本机调试,这样修改client.cpp:
servAddr.sin_port = htons(4567); 中4567改成SERV_TCP_PORT
hzhm1985 2006-07-27
  • 打赏
  • 举报
回复
刚学,什么都不懂!

18,356

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 网络编程
c++c语言开发语言 技术论坛(原bbs)
社区管理员
  • 网络编程
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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