关闭

基于TCP的Sockets编程

标签: sockettcpC++
229人阅读 评论(0) 收藏 举报
分类:

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

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:28936次
    • 积分:1282
    • 等级:
    • 排名:千里之外
    • 原创:93篇
    • 转载:49篇
    • 译文:0篇
    • 评论:2条
    最新评论