windows下简单的C语言服务器(TCP)

本文介绍了如何在Windows环境下,使用C语言通过Visual Studio 2012来编写一个简单的TCP服务器。首先,通过`ipconfig/all`获取本机IP,然后详细阐述了C语言实现服务器和客户端的步骤。

回顾下windows下网络方面的东西 首先写了下C语言的socket 

--查看本机IP:ipconfig/all


---C语言实现

---visual studio 2012

Server:

#include <stdio.h>
#include <winsock2.h>

#pragma comment(lib,"ws2_32.lib")

int main(void)
{
	//初始化wsa
	WORD sockVision = MAKEWORD(2,2);
	WSADATA wsadata;
	//其他变量
	SOCKET slisten;
	SOCKET sClient;
	struct sockaddr_in remoteAddr;
	struct sockaddr_in sin;
	int ret = -1;
	int nAddrlen = sizeof(remoteAddr);
	char revdata[255];
	char senddata[255];

	if( WSAStartup(sockVision,&wsadata) != 0 )
	{
		printf("WSA初始化失败\n");
		return 0;
	}

	//创建套接字
	slisten = socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);
	if(slisten == INVALID_SOCKET)
	{
		printf("socket监听者创建失败\n");
		return 0;
	}

	//绑定IP和端口
	sin.sin_family = AF_INET;
	sin.sin_port = htons(8888);
	sin.sin_addr.S_un.S_addr = INADDR_ANY;
	if( bind(slisten,(LPSOCKADDR)&sin,sizeof(sin)) == SOCKET_ERROR )
	{
		printf("绑定IP和端口\n");
		return 0;
	}

	//监听
	if(listen(slisten,5) == SOCKET_ERROR)
	{
		printf("监听失败\n");
		return 0;
	}

	//循环接收数据
	while(1)
	{
		printf("等待连接.........\n");
		sClient = accept(slisten,(SOCKADDR *)&remoteAddr,&nAddrlen);
		if(sClient == INVALID_SOCKET)
		{
			printf("接受客户端失败,正在重试.........\n");
			continue;
		}
		printf("接受客户端成功:%s\n",inet_ntoa(remoteAddr.sin_addr));

		//接收数据
		while(1)
		{
			ret = recv(sClient,revdata,255,0);
			if(ret > 0)
			{
				revdata[ret] = 0x00;
				printf("\n");
				printf("客户:");
				printf(revdata);
				printf("\n");
			}

			if(strcmp(revdata,"bye") == 0)
				break;

			//发送数据
			printf("我:");
			scanf("%s",senddata);
			send(sClient,senddata,strlen(senddata),0);
			
		}
		closesocket(sClient);
	}

	closesocket(sClient);
	WSACleanup();
	return 0;
}


Client:

#include <stdio.h>
#include <winsock2.h>

#pragma comment(lib,"ws2_32.lib")


int main(void)
{
	WORD sockVision = MAKEWORD(2,2);
	WSADATA wsadata;
	SOCKET sclient ;
	struct sockaddr_in serAddr;
	char senddata[255];
	char revdata[255];
	int ret = -1;
	if(WSAStartup(sockVision,&wsadata) != 0)
	{
		printf("WSA初始化失败\n");
		return 0;
	}

	sclient = socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);
	if(sclient == INVALID_SOCKET)
	{
		printf("socket客户端创建失败\n");
		return 0;
	}

	serAddr.sin_family = AF_INET;
	serAddr.sin_port = htons(8888);
	serAddr.sin_addr.S_un.S_addr = inet_addr("192.168.1.224");
	if( connect(sclient,(SOCKADDR *)&serAddr,sizeof(serAddr)) == SOCKET_ERROR )
	{
		printf("socket客户端连接失败\n");
		return 0;
	}
	while(1)
	{
		printf("我:");
		scanf("%s",senddata);
		send(sclient,senddata,strlen(senddata),0);
		if(strcmp(senddata,"bye") == 0)
			break;
		ret = recv(sclient,revdata,255,0);
		if(ret > 0)
		{
			revdata[ret] = 0x00;
			printf("\n");
			printf("服务器:");
			printf(revdata);
			printf("\n");
		}
	}

	closesocket(sclient);
	WSACleanup();

	system("pause");
	return 0;
}

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值