基于TCP的Sockets编程

Win32 下使用SOCKET  API函数进行网络开发的基本流程与方法

1、初始化和释放套接字库

2、创建套接字句柄

3、绑定地址信息

4、连接

5、数据收发

6、关闭套接字


下面介绍基于TCP的Sockets编程

TCP服务器

#include<winsock2.h>
#include<stdio.h>
#include<Windows.h>
#pragma comment(lib,"WS2_32.lib")
int main()
{
	WSADATA data;	//定义WADATA结构体对象
	WORD w=MAKEWORD(2,0);	//定义版本号
	char sztext[]="欢迎你\r\n";	//定义并初始化发送到客户端的字符数
	::WSAStartup(w,&data);//初始化套接字库
	SOCKET s,s1; //定义连接套接字和数据收发套接字句柄
	s=::socket(AF_INET,SOCK_STREAM,0);//创建TCP套接字
	sockaddr_in addr,addr2; //定义套接字地址结构
	int n=sizeof(addr2);//获取套接字地址结构大小
	addr.sin_family=AF_INET;	//初始化地址结构
	addr.sin_port=htons(75);
	addr.sin_addr.S_un.S_addr=INADDR_ANY;
	::bind(s,(sockaddr*)&addr,sizeof(addr));//绑定套接字
	::listen(s,5);	//监听套接字
	printf("服务器已经启动\r\n");	//输出提示信息
	while(true)
	{
		s1=::accept(s,(sockaddr*)&addr2,&n);	//接收连接请求
		if(s1!=NULL)
		{
			printf("%s已经连接上\r\n",inet_ntoa(addr2.sin_addr));
			::send(s1,sztext,sizeof(sztext),0);//向客户端发送字符数组
		}
		::closesocket(s);//关闭套接字句柄
		::closesocket(s1);
		::WSACleanup();	//释放套接字库
		if(getchar())
		{
			return 0;
		}
		else
		{
			::Sleep(100);	//应用睡眠0.1秒
		}

	}
}

TCP客户端

#include<winsock2.h>
#include<stdio.h>
#include<Windows.h>
#pragma comment(lib,"WS2_32.lib")
int main()
{
	WSADATA data;	//定义WADATA结构体对象
	WORD w=MAKEWORD(2,0);	//定义版本号
	//char sztext[]="欢迎你\r\n";	//定义并初始化发送到客户端的字符数
	::WSAStartup(w,&data);//初始化套接字库
	//SOCKET s,s1; //定义连接套接字和数据收发套接字句柄
	SOCKET s;
	char sztext[10]={0};
	s=::socket(AF_INET,SOCK_STREAM,0);//创建TCP套接字
	//sockaddr_in addr,addr2; //定义套接字地址结构
	sockaddr_in addr;
	//int n=sizeof(addr2);//获取套接字地址结构大小
	addr.sin_family=AF_INET;	//初始化地址结构
	addr.sin_port=htons(75);
	//addr.sin_addr.S_un.S_addr=INADDR_ANY;
	addr.sin_addr.S_un.S_addr=inet_addr("127.0.0.1");
	printf("客户端已经启动\r\n");	//输出提示信息
	//::bind(s,(sockaddr*)&addr,sizeof(addr));//绑定套接字
	//::listen(s,5);	//监听套接字
	::connect(s,(sockaddr*)&addr,sizeof(addr));
	::recv(s,sztext,sizeof(sztext),0);

	//printf("服务器已经启动\r\n");	//输出提示信息
	//while(true)
	printf("%s\r\n",sztext);
		::closesocket(s);//关闭套接字句柄
		//::closesocket(s1);
		::WSACleanup();	//释放套接字库
		if(getchar())
		{
			return 0;
		}
		else
		{
			::Sleep(100);	//应用睡眠0.1秒
		}

	//}
}


  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值