ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

基于C/C++的最简单的网络编程(Server and Client)传输图片,文本等

2021-09-25 10:34:44  阅读:236  来源: 互联网

标签:return SOCKET C++ Server Client fd INVALID printf addr


1.初始化网络库

bool init_Socket();


bool init_Socket()
{
	WSADATA wsadata;
	if (0 != WSAStartup(MAKEWORD(2, 2), &wsadata)) // windows异步套接字
	{
		printf("启动网络库失败 %d", WSAGetLastError());
		return false;
	}
		
	return true;
}

2.创建服务器socket

SOCKET create_serverSocket();

SOCKET create_serverSocket()
{
	SOCKET fd = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
	if (INVALID_SOCKET == fd)
	{
		printf("create socket error");
		return INVALID_SOCKET;
	}
	//2.给socket 绑定IP地址和端口号
	struct sockaddr_in addr;
	addr.sin_family = AF_INET;
	addr.sin_port = htons( PORT);
	addr.sin_addr.S_un.S_addr = ADDR_ANY;

	if (SOCKET_ERROR == bind(fd, (struct socketaddr*)&addr, sizeof(addr)))
	{
		return INVALID_SOCKET;
	}
	//开始监听
	listen(fd, 10);


	return fd;
}

3.创建客户端socket

SOCKET  create_clientSocket(const char* ip)
{
	SOCKET fd = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
	if (INVALID_SOCKET == fd)
	{
		printf("Client socket error");
		return INVALID_SOCKET;
	}
	//2.给socket 绑定服务IP和端口号
	struct sockaddr_in addr;
	addr.sin_family = AF_INET;
	addr.sin_port = htons(PORT);
	addr.sin_addr.S_un.S_addr = inet_addr(ip);//绑定服务器IP
	if (INVALID_SOCKET == connect(fd, &addr, sizeof(addr)))
	{
		printf("connect error");
		return INVALID_SOCKET;
	}
	
	return fd;

}

4.关闭网络库

bool close_Socket()
{
	if (0 != WSACleanup())
	{
		printf("关闭网络库失败 %d", WSAGetLastError());
		return false;
	}
	return true;
}

接下来是 创建服务器端  和客户端

服务器:

int  main()
{
	init_Socket();

	SOCKET serfd = create_serverSocket();

	printf("server creat successed ,wait client connect...\n");
	//等待客户端连接
	SOCKET clifd = accept(serfd, NULL, NULL);

	if (clifd == INVALID_SOCKET)\
	{
		printf("连接失败");

	}
	printf("友好的问候一下");
	//可以和客户端通信

	sendFile(clifd,"../Test.txt");
    
	closesocket(clifd);
	closesocket(serfd);
	close_Socket();

	return 0;
}

客户端:

int main()
{
	init_Socket();

	SOCKET  fd = create_clientSocket("127.0.0.1");

	printf("连接 服务器成功。。。。");

	recvFile(fd, "test.txt");

	closesocket(fd);
	close_Socket();
	getchar();
	return 0;

}

最后启动服务器  在启动客户端进行通信;

具体代码见:https://github.com/w1315/w1315icon-default.png?t=L892https://github.com/w1315/w1315

标签:return,SOCKET,C++,Server,Client,fd,INVALID,printf,addr
来源: https://blog.csdn.net/qq_46284579/article/details/120468170

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有