socket 的一些麻烦
来源:互联网 发布:淘宝宝贝下如何下架 编辑:程序博客网 时间:2024/04/29 13:11
在vs2010 上面倒是可以编译的源代码,但是换到2008上,编译就出现了如下错误信息。
“sockaddr_in”: 未声明的标识符
百度谷歌了半个小时多,真烦哪,没找到错在哪里。
包含的头文件是windows.h
最后还是有了结果,就是 在 sockaddr_in 的前头 加上 struct.
还有错误
error C2275: “SOCKET”: 将此类型用作表达式非法
将其放到函数的前头,即WSAStartup(MAKEWORD(2,2),&ws); 之前就可以了。
几乎把所有变量声明都放到了最前端,不过一般的情况下似乎不需要这个样子的。中间声明变量不可以么?有人说可以,有人说不可以。
#include <string.h>
#include <stdio.h>
#include <stdlib.h>
#include <windows.h>
#pragma comment(lib,"ws2_32.lib")
int main(){
SYSTEMTIME sys;
WSADATA ws;
int ret =0;
SOCKET sListen;
SOCKET s;
SOCKET sClient;
fd_set allSocketSet;
fd_set readSet;
fd_set writeSet;
struct sockaddr_in clientAddr;
struct sockaddr_in servAddr;
char bufRecv[100];
char bufSend[100];
ret=WSAStartup(MAKEWORD(2,2),&ws);
if(ret!=0)
{
printf("WSATartup() failed!\n");
return -1;
}
sListen = socket(AF_INET,SOCK_STREAM,0);
if(sListen==INVALID_SOCKET)
{
return -1;
}
servAddr.sin_family = AF_INET;
servAddr.sin_addr.s_addr = INADDR_ANY;
servAddr.sin_port = htons(8000);
ret = bind(sListen,(struct sockaddr*)&servAddr,sizeof(servAddr));
if(ret==SOCKET_ERROR)
return -1;
ret = listen(sListen,5);
if(ret == SOCKET_ERROR)
return -1;
FD_ZERO(&allSocketSet);
FD_ZERO(&readSet);
FD_ZERO(&writeSet);
readSet = allSocketSet;
writeSet = allSocketSet;
FD_SET(sListen,&allSocketSet);
while(1)
{
FD_ZERO(&readSet);
FD_ZERO(&writeSet);
readSet = allSocketSet;
writeSet = allSocketSet;
ret = select(0,&readSet,0,NULL,NULL);
if(ret == SOCKET_ERROR)
return -1;
if(ret >0)
{
unsigned int i;
for(i=0;i<allSocketSet.fd_count;++i)
{
s = allSocketSet.fd_array[i];
if(FD_ISSET(s,&readSet))
{
if(s==sListen)
{
int len =sizeof(clientAddr);
sClient =accept(s,(struct sockaddr*)&clientAddr,&len);
FD_SET(sClient,&allSocketSet);
GetLocalTime(&sys);
//memset(bufSend,0,100);
//memcpy(bufSend,&sys,sizeof(SYSTEMTIME));
//send(sClient,bufSend,sizeof(bufSend),0);
}
else{
ret = recv(s,bufRecv,100,0);
if(ret==SOCKET_ERROR)
{
DWORD err = WSAGetLastError();
if(err == WSAECONNRESET)
printf("client closed by force\n");
else
printf("recv() failed");
FD_CLR(s,&allSocketSet);
break;
}
FD_CLR(s,&allSocketSet);
printf("%s",bufRecv);
bufRecv[0]='\0';
// memset(bufSend,0,100);
// memcpy(bufSend,&sys,sizeof(SYSTEMTIME));
// send(s,bufSend,sizeof(bufSend),0);
}
}
}
}
}
}
- socket 的一些麻烦
- PowerPoint的一些麻烦
- 配置Opencv的遇到的一些麻烦..
- 装机遇到的一些麻烦事情
- 无符号数带来的一些麻烦
- 为了解决一些麻烦的事情
- LUA和C++绑定的一些天然的麻烦
- 写QT程序遇到的一些麻烦的解决方法
- 使用CCS时遇到的的一些麻烦
- FMS与视频会议一些想法(FMS方案的麻烦)
- linux下写Makefile遇到的一些麻烦
- hadoop初试时遇到的一些小麻烦
- Socket编程还是挺麻烦
- Socket 的一些函数
- socket的一些问题
- socket()的一些参数
- socket 的一些函数
- socket的一些记录
- OC封装的TLV数据格式解析库
- 用数组输出一段字符,用选择法见其输出(降序)
- ffmpeg avi转h264
- 数据结构 线性表 顺序表的归并
- 别人写了一个mircro XML解析器,附源代码
- socket 的一些麻烦
- 成绩
- hdoj1058 Humble Numbers ( set 水)
- 编程面试的10大算法概念汇总(转载)
- 3角形面积
- Linux 文件权限
- 菜鸟学JAVA之JMenu
- 各种类和视图之间相互调用的总结
- 用数组编程字符,并统计出字符串中大小写字母的个数