您的位置:首页 > 其它

Windows Socket阻塞模式基本模型

2009-12-27 13:32 274 查看
Server.c



#include <winsock.h>
#include <windows.h>
#include <stdio.h>
#include <string.h>

int main(void)
{
	WSADATA wd;
	SOCKET listenSocket;
	SOCKET connSocket;
	SOCKADDR_IN saListen;
	SOCKADDR_IN saConn;
	char buffer[100];
	int port=5000;
	int i=0;
	int len=sizeof(saConn);

	WSAStartup(MAKEWORD(2,2),&wd);
	listenSocket=socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);

	memset(&saListen, 0, sizeof(saListen));
	saListen.sin_family=AF_INET;
	saListen.sin_port=htons(port);
	saListen.sin_addr.S_un.S_addr=INADDR_ANY;

	if ((bind(listenSocket,(SOCKADDR *)&saListen,sizeof(saListen)))==SOCKET_ERROR)
	{
		printf("%d/n",WSAGetLastError());
		WSACleanup();
		return 0;
	}
	len = sizeof(saConn);
	if ((listen(listenSocket,5))==SOCKET_ERROR)
	{
		printf("2%d/n",WSAGetLastError());
		WSACleanup();
		return 0;
	}
	if ((connSocket=accept(listenSocket,(SOCKADDR *)&saConn,&len))==INVALID_SOCKET)
	{
		printf("%d/n",WSAGetLastError());
		WSACleanup();
		return 0;
	}
	while(1)
	{
		i=0;
		if ((i=recv(connSocket,buffer,100,0))==SOCKET_ERROR)
		{
			printf("5/n");
			closesocket(listenSocket);
			getchar();
			return 0;
		}
		buffer[i]='/0';
		printf("/n%s/n",buffer);
	}
	closesocket(listenSocket);
	closesocket(connSocket);
	WSACleanup();
}




Client.c



#include <winsock.h>
#include <stdio.h>
#include <windows.h>
#include <string.h>

int main(void)
{
	WSADATA wd;
	SOCKET cSocke;
	SOCKADDR_IN sa;
	int port=5000;
	char buffer[100];
	int ret=0;
	int len=0;
	
	if(WSAStartup(MAKEWORD(2,2),&wd)!=0)
		printf("0/n");
	
	if((cSocke=socket(AF_INET,SOCK_STREAM,IPPROTO_TCP))==INVALID_SOCKET)
	{
		printf("1/n");
		WSACleanup();
		return 0;
	}
	
	memset(&sa, 0, sizeof(sa));	
	sa.sin_family=AF_INET;
	sa.sin_port=htons(port);
	sa.sin_addr.S_un.S_addr=inet_addr("127.0.0.1");
	
	if ((ret=connect(cSocke,(struct sockaddr*)&sa,sizeof(sa)))==SOCKET_ERROR)
	{
		printf("a%d/n",WSAGetLastError());
		printf("%d/n",ret);
		WSACleanup();
		return 0;
	}
	while (1)
	{
		memset(buffer,0, sizeof(buffer)); 
		printf("%d/n",sizeof(buffer));
		scanf("%s",buffer);
		len=strlen(buffer);
		buffer[len]='/0';
		if ((send(cSocke,buffer,strlen(buffer),0))==SOCKET_ERROR)
		{
			printf("3/n");
			WSACleanup();
			return 0;
		}
		printf("%d",strlen(buffer));
	}
	closesocket(cSocke);
	WSACleanup();
}




这是我做的Win socket 阻塞模式的基本结构!



因为近期正在看关于这方面的东西。经过几天的努力。。终于做出来个基本的东西了。里面还有很多东西不完善。写出来留信念!!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: