Windows下的网络编程
一.面向连接–TCP
特性
传输过程中数据不会丢失
按照顺序传输数据
不存在数据边界
流程:
服务端代码
#include<winsock2.h>
#include<stdlib.h>
#include<stdio.h>
#pragma comment(lib,"ws2_32.lib")
int main() {
printf("TCP Server\n");
//初始化网络库
// 加载套接字库
WORD wVersionRequested;
WSADATA wsaData;
int err;
wVersionRequested = MAKEWORD(1, 1);
// 初始化套接字库
err = WSAStartup(wVersionRequested, &wsaData);
if (err != 0)
{
return err;
}
if (LOBYTE(wsaData.wVersion) != 1 || HIBYTE(wsaData.wVersion) != 1)
{
WSACleanup();
return -1;
}
//创建套接字
SOCKET sockSrv = socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);
if (sockSrv == INVALID_SOCKET) {
printf("create socket error: %s\n",GetLastError());
return -1;
}
SOCKADDR_IN addrSrv;
addrSrv.sin_addr.S_un.S_addr = htons(INADDR_ANY);
addrSrv.sin_family = AF_INET;
addrSrv.sin_port = htons(6000);
//bind
if (SOCKET_ERROR == bind(sockSrv, (SOCKADDR*)&addrSrv, sizeof(addrSrv)))
{
printf("bind error = %d\n", GetLastError());
}
//listen
if (SOCKET_ERROR == listen(sockSrv, 5))// 最大监听数目,执行到listen,未执行到accept//该部可以接受连接放到队列,
//但是不会处理数据
{
printf("listen error = %d\n", GetLastError());
}
printf("sleep start");
Sleep(60000);
printf("slepep end");
SOCKADDR_IN addrCil;
int len = sizeof(addrCil);
while (TRUE) {
SOCKET sockConn= accept(sockSrv, (SOCKADDR*)&addrCil, &len);
char sendBuf[100] = {
0 };
sprintf_s