socket bind()调用出现问题了。。。。。。。。。

lming_08 2011-04-13 10:00:44
// ChatProgram.cpp : 定义控制台应用程序的入口点。
//

#include "stdafx.h"
#include <winsock2.h>
#include<string.h>
#pragma comment(lib,"ws2_32.lib")
#pragma comment (lib,"wsock32.lib")
#include<sys/types.h>
#include<iostream>
using namespace std;

#define SERVERPORT 4000
#define SERVERADDR "127.0.0.1"
int _tmain(int argc, _TCHAR* argv[])
{
WSADATA wsaData;
WORD sockVersion = MAKEWORD(2, 0);
if (0 != WSAStartup(sockVersion, &wsaData))
{
cout << "Failed to retrive socket version."<<endl;
return 0;
}
SOCKET sockfd;
if((sockfd=socket(AF_INET,SOCK_STREAM,0))<0)
{
cout<<"error socket \0"<<endl;
WSACleanup();
return 0;
}
sockaddr_in addr_server;
sockaddr_in addr_client;

addr_server.sin_family =AF_INET;
addr_server.sin_addr.S_un .S_addr =inet_addr(SERVERADDR);
addr_server.sin_port =htons(SERVERPORT);
//bzero(&(addr_server.sin_zero ),8);//linux平台下运行
memset(&(addr_server.sin_zero) ,0,8);
int bnd,lsten;
bnd=bind(sockfd,(struct sockaddr *) &addr_server,sizeof((struct sockaddr *)&addr_server));
if(bnd==SOCKET_ERROR)//bnd=SOCKET_ERROR被执行了,为什么?
{
cout<<"error:can not bind,error code: "<<WSAGetLastError<<endl;
}
if((lsten=listen(sockfd,5))!=0)//监听队列长度是5
{
cout<<"error:can not listen \0"<<endl;//这个也被执行了
}
int len=sizeof(addr_client);//必须初始化
while(true)//循环型服务员代码
{
SOCKET newsockfd=accept(sockfd,(struct sockaddr *)&addr_client,&len);//此处的len必须被初始化
/***************************发生阻塞********************************************/
if(newsockfd<0)
{
cout<<"accept error \0"<<endl;
}
char sendbuff[512],recbuff[512];
memset(sendbuff, 0, sizeof(sendbuff));//将sendbuff前sizeof的令为0
memset(recbuff, 0, sizeof(recbuff));
//将ip信息打印到buff中
sprintf(sendbuff,"你的ip: %s",inet_ntoa(addr_client.sin_addr));
if(-1==send(newsockfd,sendbuff,strlen(sendbuff)+1,0))
{
cout<<"failed to send message \0"<<endl;
}
if(recv(newsockfd,recbuff,strlen(recbuff),0)<0)
{
cout<<"failed to recieve message \0"<<endl;
}
else
{
printf("message:%s",recbuff);
}
cout<<"********************************************"<<endl;
closesocket(newsockfd);
}
return 0;
}
以上,bind()调用后,居然失败了,各位大侠,能解决下吗?
...全文
218 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
lming_08 2011-04-13
  • 打赏
  • 举报
回复
这位朋友一眼就看出来了,太感谢了,花了我一下午啊。。。感谢各位的帮助!!![Quote=引用 3 楼 hurryboylqs 的回复:]


bnd=bind(sockfd,(sockaddr *) &addr_server,sizeof(sockaddr));
[/Quote]
Eleven 2011-04-13
  • 打赏
  • 举报
回复
bnd=bind(sockfd,(struct sockaddr *) &addr_server,sizeof((struct sockaddr *)&addr_server));
bind()函数的最后一个参数错误
bnd=bind(sockfd,(struct sockaddr *) &addr_server,sizeof(addr_server));
hurryboylqs 2011-04-13
  • 打赏
  • 举报
回复

bnd=bind(sockfd,(sockaddr *) &addr_server,sizeof(sockaddr));
King_hhuang 2011-04-13
  • 打赏
  • 举报
回复
是不是你机器上的4000端口被占用啦
WSAGetLastError看看
haogeai123 2011-04-13
  • 打赏
  • 举报
回复
GetLastError看看是什么原因。

18,356

社区成员

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

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