windows下socket开发tcp程序 简单例子

7 篇文章 0 订阅
4 篇文章 0 订阅

Windows下的简单tcp例子。

代码均在VC6.0下调试过。

服务器代码:

//TCP server
//listen port 9102
//receive string and display it

//Visual C++ 6.0

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

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


#define BUFLEN 1024

int main()
{
	SOCKET serversoc;
	SOCKET clientsoc;
	SOCKADDR_IN serveraddr;
	SOCKADDR_IN clientaddr;
	char buf[BUFLEN];
	int len;

    WSADATA wsa;
	WSAStartup(MAKEWORD(1,1),&wsa);	//initial Ws2_32.dll by a process
	if((serversoc = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP)) <= 0)	//create a tcp socket
	{
		printf("Create socket fail!\n");
		return -1;
	}
	
	serveraddr.sin_family = AF_INET;
	serveraddr.sin_port = htons(9102);
	serveraddr.sin_addr.S_un.S_addr = htonl(INADDR_ANY);

	if(bind(serversoc, (SOCKADDR *)&serveraddr, sizeof(serveraddr)) != 0)
	{
		printf("Bind fail!\n");
		return -1;
	}
	
	//start listen, maximum length of the queue of pending connections is 1
	printf("Start listen...\n");
	if(listen(serversoc, 1) != 0)
	{
		printf("Listen fail!\n");
		return -1;
	}

	len = sizeof(SOCKADDR_IN);
	

	//waiting for connecting
	if((clientsoc = accept(serversoc, (SOCKADDR *)&clientaddr, &len))<=0)
	{
		printf("Accept fail!\n");
		return -1;
	}
	printf("Connected\n");
	while(1)
	{
		//waiting for data receive
		if(recv(clientsoc, buf, BUFLEN, 0) <= 0)	
		{
			//some error occur
			printf("Close connection\n");
			closesocket(clientsoc);
			break;
		}
		printf("%s\n",buf);
	}
	
	WSACleanup(); //clean up Ws2_32.dll 
	return 0;
}


客户端代码:


//TCP client
//client send string to server

//Visual C++ 6.0

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

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


int main()
{
	SOCKET soc;
	SOCKADDR_IN serveraddr;
	SOCKADDR_IN clientaddr;
	unsigned char buf[1024];

    WSADATA wsa;
	WSAStartup(MAKEWORD(1,1),&wsa);	//initial Ws2_32.dll by a process

	if((soc = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP)) <= 0)	//create a tcp socket
	{
		printf("Create socket fail!\n");
		return -1;
	}

	serveraddr.sin_family = AF_INET;
	serveraddr.sin_port = htons(9102);
	serveraddr.sin_addr.S_un.S_addr = inet_addr("127.0.0.1");

	//connect to server
	printf("Try to connect...\n");
	if(connect(soc, (SOCKADDR *)&serveraddr, sizeof(serveraddr)) != 0)
	{
		printf("Connect fail!\n");
		return -1;
	}
	printf("Connected\n");
	while(1)
	{
		scanf("%s", buf);
		//send to server
		if(send(soc, buf, strlen(buf)+1, 0)<=0)
		{
			printf("Error!\n");
		}
	}

	WSACleanup(); //clean up Ws2_32.dll 
	return 0;
}
  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

RobinTang

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值