一个极简单的例子,就是通不过。请高手指点迷津,
还有请问SOCKET socket(AF_INET,SOCK_STREAM,0)
已经建立了socke为什么还要accept返回socket类型
着两个socket区别是什么
//extern "C"
//{
#include <Winsock2.h>
#include <stdio.h>
//}
int main()
{
WORD wVersionRequested;
WSADATA wsaData;
int err;
wVersionRequested =
MAKEWORD(1,1); // 高字节,低字节
// 一是加载套接字库,二是进行套接字库的版本协商,也就是确定版本,
err=WSAStartup(
wVersionRequested, /* 高字节副版本,低字节主版本 */
&wsaData /* 这是个出口地址,装在库版本的有关信息 */
);
if (err!=0)
{
return 1;
}
// 证明加载不成功,释放资源
if (LOBYTE(wsaData.wVersion)!=1 || HIBYTE(wsaData.wVersion)!=1)
{
WSACleanup();
return 2;
}
//创建用于监听的套接字
SOCKET sockSrv = socket(
AF_INET, /* tcp/ip 协议 */
SOCK_STREAM, /* tcp or udp */
0 /* 自动 */
);
SOCKADDR_IN addrSrv; /* */
addrSrv.sin_addr.S_un.S_addr = htonl(INADDR_ANY); /* */
addrSrv.sin_family = AF_INET; /* 地址簇为ip地址 */
addrSrv.sin_port = htons(6000); /* 端口 */
//bind套接字绑定
bind(sockSrv,(SOCKADDR*)&addrSrv,sizeof(SOCKADDR));
//将套接字设为监听模式,准备接受客户请求
listen(sockSrv,5); /*
套接字描述符,等待链接
队列的最大长度 ( 如果
设为SOMAXCONN,那么下层
就给个可能的最大值 )
*/
SOCKADDR_IN addrClient;
int len=sizeof(SOCKADDR);
while(1)
{
//等待客户请求到来
SOCKET sockConn=accept(
sockSrv, //套接字描述符
(SOCKADDR*)&addrClient, //客户机信息(ip && port)保存的地址
&len //地址信息的长度
);
char sendBuf[100];
//发送数据
sprintf(
sendBuf, //
"welcome %s ", //
inet_ntoa(addrClient.sin_addr) //
);
send(
sockConn, //套接字
sendBuf, //发送内容缓冲区的地址
strlen(sendBuf)+1, //缓冲区的长度
0 //flag一般为0
);
char recvBuf[100];
//接收数据
recv(
sockConn, //套接字
recvBuf, //接收预留的缓冲区
100, //缓冲区长度
0 //flag一般为0
);
//打印接收的数据
printf("%s\n",recvBuf);
closesocket(sockConn);
}
return 0;
}