win32网络编程实例——同步IO

服务器端代码:

<span style="font-size:12px;">#include <winsock2.h>
#include <stdio.h>
#pragma  comment(lib, "wsock32.lib")
int main()
{
	int iResults;
	WSADATA wsaData;
	SOCKET listenSocket;
	SOCKET acceptSocket;
	struct sockaddr_in serverAddr;
	char recvbuf[1024] ={0};

	iResults = WSAStartup(MAKEWORD(2,2),&wsaData);
	if(iResults != NO_ERROR)
	{	
		printf("WSAStartup error:%d\n",iResults);
		WSACleanup();
		return -1;
	}
	listenSocket = socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);
	if(listenSocket == INVALID_SOCKET)
	{
		printf("socket error:%d\n",WSAGetLastError());
		WSACleanup();;
		closesocket(listenSocket);
		return -1;
	}
	
	serverAddr.sin_addr.s_addr = inet_addr("127.0.0.1");
	serverAddr.sin_family = AF_INET;
	serverAddr.sin_port = htons(27015);
	iResults = bind(listenSocket,(SOCKADDR *)&serverAddr,sizeof(serverAddr));
	if(iResults == SOCKET_ERROR)
	{
		printf("bind error:%d\n",WSAGetLastError());
	        WSACleanup();
		closesocket(listenSocket);
		return -1;
	}
	iResults = listen(listenSocket,SOMAXCONN );
	if(iResults == SOCKET_ERROR)
	{
		printf("listen error:%d\n",WSAGetLastError());
		WSACleanup();
		closesocket(listenSocket);
		return -1;
	}	
	
	acceptSocket = accept(listenSocket,NULL,NULL);
	if(acceptSocket == INVALID_SOCKET)
	{
		printf("accept error:%d\n",WSAGetLastError());
		WSACleanup();
		closesocket(listenSocket);
		closesocket(acceptSocket);
		return -1;
	}
	printf("connect is establisted!\n");
	do{
		iResults = recv(acceptSocket,recvbuf,sizeof(recvbuf),0);
		if(iResults > 0)
			printf("recv num is %d, recvbuf is %s\n",iResults,recvbuf);
		else if(iResults == 0)
			printf("Connection closed\n");
		else 
			printf("recv error:%d\n",WSAGetLastError());		 

	}while(iResults < 0);
	closesocket(listenSocket);
        WSACleanup();
	return 0;
}
</span>

客户端代码:

<span style="font-size:12px;">#include <winsock2.h>
#include <stdio.h>
#pragma  comment(lib, "wsock32.lib")
int main()
{
	int iResults;
	unsigned int numSend;
	unsigned int pSend;
	WSADATA wsaData;
	SOCKET connectSocket;
	struct sockaddr_in serverAddr;
	char sendbuf[1024] = "HelloWorld!";

	iResults = WSAStartup(MAKEWORD(2,2),&wsaData);
	if(iResults != NO_ERROR)
	{	
		printf("WSAStartup error:%d\n",iResults);
		WSACleanup();
		return -1;
	}
	connectSocket = socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);
	if(connectSocket == INVALID_SOCKET)
	{
		printf("socket error:%d\n",WSAGetLastError());
		WSACleanup();
		closesocket(connectSocket);
		return -1;
	}
	
	serverAddr.sin_addr.s_addr = inet_addr("127.0.0.1");
	serverAddr.sin_family = AF_INET;
	serverAddr.sin_port = htons(27015);
	
	iResults = connect(connectSocket,(SOCKADDR *)&serverAddr,sizeof(serverAddr));
	if(iResults == SOCKET_ERROR)
	{
		printf("connect error:%d\n",WSAGetLastError());
		WSACleanup();
		closesocket(connectSocket);
		return -1;
	}

	numSend = 0;
	pSend = 0;
	do{
		numSend = send(connectSocket ,sendbuf + pSend ,strlen(sendbuf) - pSend ,0);
		if(numSend == SOCKET_ERROR)
		{
			printf("send error:%d\n",WSAGetLastError());
			WSACleanup();
		}
		pSend = pSend + numSend;
	}while(pSend < (int)strlen(sendbuf));//not <=

	closesocket(connectSocket);
        WSACleanup();
	return 0;
}</span>




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值