【文件属性】:
文件名称:套接字编程
文件大小:2KB
文件格式:CPP
更新时间:2017-04-13 14:34:10
winsockt
#include
#include
#include
#pragma comment(lib,"wsock32.lib")
#define MAX_LEN 1024
//数据报格式
struct Mes_pack
{
char* ip_addr;
char* data_buf;
int data_len;
};
struct Sock_data
{
SOCKET sock;
SOCKADDR_IN addr;
};
void InitListenSocket(SOCKET& Listen_Socket)
{
int ret;
WSADATA wsadata;
int Port = 5150;
SOCKADDR_IN Server_Addr;
if ((ret = WSAStartup(MAKEWORD(2,2), &wsadata)) != 0)
{
printf("WSAStartup failed with error %d\n", ret);
return;
}
if ((Listen_Socket = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP)) == INVALID_SOCKET)
{
printf("socket failed with error %d\n", WSAGetLastError());
WSACleanup();
return;
}
u_long iMode = 1;
ioctlsocket(Listen_Socket, FIONBIO, &iMode);//通常socket运行后默认为阻塞模式。要调用ioctlsocket函数设置非阻塞模式。
Server_Addr.sin_family = AF_INET;
Server_Addr.sin_port = htons(Port); //将16bit字符从host字节序转化成网络字节序
Server_Addr.sin_addr.s_addr = htonl(INADDR_ANY);//将32bit字符从host转化成网络的
if (bind(Listen_Socket, (SOCKADDR *)&Server_Addr, sizeof(Server_Addr))== SOCKET_ERROR)
{
printf("bind failed with error %d\n", WSAGetLastError());
closesocket(Listen_Socket);
WSACleanup();
return;
}
if (listen(Listen_Socket, 5) == SOCKET_ERROR)
{
printf("listen failed with error %d\n", WSAGetLastError());
closesocket(Listen_Socket);
WSACleanup();
return;
}
printf("We are awaiting a connection on port %d.\n", Port);
}