`

Socket编程

 
阅读更多

服务器端程序:

#include<stdio.h>
#include<winsock.h>	//引入winsock头文件

/**
**描述:基于TCP的聊天程序 服务器端
**
*/
int main()
{
	/*===============================定义变量===============================*/

	char sendBuf[100];				//发送数据的缓冲区
	char receiveBuf[100];			//接受数据的缓冲区
	int sendLen;					//发送数据的长度
	int receiveLen;					//接受数据的长度
	int length;						//标示socketAddr的长度

	SOCKET socket_server;			//定义服务器套接字
	SOCKET socket_receive;			//定义用于连接套接字

	SOCKADDR_IN serverAdd;			//服务器地址信息结构
	SOCKADDR_IN clientAdd;			//客户端地址信息结构
	
	WORD wVersionRequested;			//字(word):无符号
	WSADATA wsaData;				//库版本信息结构
	int error;						//标示错误

	/*=============================初始化套接字库================================*/
	
	/*定义版本类型,将两个字节组合成一个字,前面是低字节,后面是搞字节*/
	wVersionRequested=MAKEWORD(2,2);
	
	/*加载套接字库,初始化Ws2_32.dll动态链接库*/
	error=WSAStartup(wVersionRequested,&wsaData);
	if(error!=0)
	{
		printf("加载套接字失败");
		return 0;
	}

	/*判断请求加载的版本号是否符合要求*/
	if(LOBYTE(wsaData.wVersion)!=2||HIBYTE(wsaData.wHighVersion)!=2)
	{
		WSACleanup();				//不符合要求,关闭套接字程序
		return 0;					
	}

	/*=============================设置连接地址=============================*/

	serverAdd.sin_family=AF_INET;						//地址家族,对于必须是AF_INET,注意只有它不是网络字节顺序
	serverAdd.sin_addr.S_un.S_addr=htonl(INADDR_ANY);	//主机地址
	serverAdd.sin_port=htons(5000);						//端口号	

	/*=============================创建套接字=============================*/
	/*AF_INET  表示指定地址族,SOCK_STREAM表示流式套接字TCP,特定的地址家族相关协议*/
	socket_server=socket(AF_INET,SOCK_STREAM,0);
	
	//绑定套接字到本地的某个地址和端口上
	if(bind(socket_server,(SOCKADDR*)&serverAdd,sizeof(SOCKADDR))==SOCKET_ERROR)
	{
		printf("绑定失败\n");
	}

	//设置套接字监听状态
	if(listen(socket_server,5)<0)
	{
		printf("监听失败\n");
	}
	
	length=sizeof(SOCKADDR);
	socket_receive=accept(socket_server,(SOCKADDR*)&clientAdd,&length);
	if(socket_receive==SOCKET_ERROR)
	{
		printf("接受连接失败");
	}
	
	/*=============================进行聊天=============================*/
	while(1)
	{
		receiveLen=recv(socket_receive,receiveBuf,100,0);
		if(receiveLen<0)
		{
			printf("接受失败\n");
			printf("程序退出\n");
			break;
		}
		else
		{
			printf("客户端说:%s\n",receiveBuf);
		}

		/*----------发送数据-------------*/
		printf("please enter message:");
		scanf("%s",sendBuf);
		
		sendLen=send(socket_receive,sendBuf,100,0);
		if(sendLen<0)
		{
			printf("发送失败\n");
		}

	}

	/*=============================释放套接字,关闭动态库=============================*/
	closesocket(socket_server);
	closesocket(socket_receive);
	
	WSACleanup();

	return 0;
}

 客户端程序:

#include<stdio.h>
#include<winsock.h>	//引入winsock头文件

/**
**描述:聊天室客户端程序
*/

int main()
{
	/*===============================定义变量===============================*/
	char sendBuf[100];							//发送数据的缓冲区
	char receiveBuf[100];						//接受数据的缓冲区
	int sendLen;								//发送数据的长度
	int receiveLen;								//接受数据的长度

	SOCKET socket_send;							//定义套接字
	SOCKADDR_IN serverAdd;						//服务器地址信息结构

	WORD wVersionRequested;			//字(word):无符号
	WSADATA wsaData;				//库版本信息结构
	int error;						//标示错误

	/*=============================初始化套接字库================================*/
	
	/*定义版本类型,将两个字节组合成一个字,前面是低字节,后面是搞字节*/
	wVersionRequested=MAKEWORD(2,2);
	
	/*加载套接字库,初始化Ws2_32.dll动态链接库*/
	error=WSAStartup(wVersionRequested,&wsaData);
	if(error!=0)
	{
		printf("加载套接字失败");
		return 0;
	}

	/*判断请求加载的版本号是否符合要求*/
	if(LOBYTE(wsaData.wVersion)!=2||HIBYTE(wsaData.wHighVersion)!=2)
	{
		WSACleanup();				//不符合要求,关闭套接字程序
		return 0;					
	}

	/*=============================设置连接地址=============================*/

	serverAdd.sin_family=AF_INET;						//地址家族,对于必须是AF_INET,注意只有它不是网络字节顺序
	serverAdd.sin_addr.S_un.S_addr=inet_addr("192.168.1.100");	//主机地址
	serverAdd.sin_port=htons(5000);						//端口号

	socket_send=socket(AF_INET,SOCK_STREAM,0);

	if(connect(socket_send,(SOCKADDR*)&serverAdd,sizeof(SOCKADDR))==SOCKET_ERROR)
	{
		printf("连接失败\n");
	}

	/*-----------------进行聊天---------------------------*/
	while(1)
	{
		printf("请输入信息:");
		scanf("%s",&sendBuf);
		sendLen=send(socket_send,sendBuf,100,0);
		if(sendLen<0)
		{
			printf("发送失败\n");
		}

		receiveLen=recv(socket_send,receiveBuf,100,0);
		if(receiveLen<0)
		{
			printf("接受失败\n");
		}
		else
		{
			printf("服务器说:%s\n",receiveBuf);
		}
	}

	return 0;
}

 

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics