【网络编程,用C语言写客户端与服务器两个同时怎么写-记录】

网络编程我个人感觉就有点像打电话一样(小白之见)
就是,每个人的电话号码就像电脑的IP地址,
而每个电话号码的分机号就像端口号一样
首先需要找到电话号码,拨号,建立连接(可以连接多个)
之后进行文件和信息流的传送,
结束之后释放空间等等。。
客户端

#include <stdio.h>
#include <winsock2.h>
#include <string.h>
#pragma comment(lib,"ws2_32.lib")
int main()
{
    
    
	WSADATA wsaData;
	WSAStartup(MAKEWORD(2, 2), &wsaData);

	//创建电话机
	SOCKET hClntSock = socket(PF_INET, SOCK_STREAM, 0);
	SOCKADDR_IN clntAddr;
	memset(&clntAddr, 0, sizeof(clntAddr));
	clntAddr.sin_family = AF_INET;//IPV4
	clntAddr.sin_addr.s_addr =inet_addr("127.0.0.1"); //IP地址
	clntAddr.sin_port = htons(8888);//  指定对方连接软件

	//连接 127.0.0.1本机测试
	connect(hClntSock, (SOCKADDR*)&clntAddr, sizeof(clntAddr));

	//发送文件名
	send(hClntSock, "1.jpg", 1024, 0);
	FILE* fp = fopen("1.jpg", "rb");
	//打开的这个1.jpg 有内容    测试一下当前代码
	int bytes;
	char buf[1024] = {
    
     0 };
	while ((bytes = fread(buf, 1, 1024, fp)) > 0)
	{
    
    
		send(hClntSock, buf, 1024, 0);
	}
	fclose(fp);//关闭文件
	closesocket(hClntSock);//挂断电话


	while (1);
	WSACleanup();//别忘了清理和释放内存空间
	return 0;
}

服务器

#include <stdio.h>
#include <winsock2.h>
#include <string.h>
#pragma comment(lib,"ws2_32.lib")
int main()
{
    
    
	WSADATA wsaData;
	WSAStartup(MAKEWORD(2, 2), &wsaData);
	//创建套接字\(安装电话机
	SOCKET hServSock = socket(PF_INET,SOCK_STREAM,0);
	//绑定电话号码和分机号(IP地址和端口号)
	SOCKADDR_IN servAddr;
	memset(&servAddr, 0, sizeof(servAddr));
	servAddr.sin_family = AF_INET;//IPV4
	servAddr.sin_addr.s_addr = htonl(INADDR_ANY); //IP地址
	servAddr.sin_port = htons(8888);//  端口好号!=0-1024
	bind(hServSock, (SOCKADDR*)&servAddr, sizeof(servAddr));//绑定
	//监听
	listen(hServSock, 5);
	//发现有客户端请求连接接电话
	SOCKADDR_IN clntAddr;
	int clntAdrSz = sizeof(clntAddr);
	SOCKET hClntSock = accept(hServSock,(SOCKADDR*)&clntAddr,&clntAdrSz);

	//说话
	//看看对面是什么IP
	printf("对方IP地址为:%s\n", inet_ntoa(servAddr.sin_addr));


	//一旦连上
	char buf[1024] = {
    
     0 };
	//接收文件
	recv(hClntSock, buf, 1024,0);
	printf("%s\n", buf);

	FILE* fp = fopen(buf, "wb"); //jpg png 创建二进制文件
	//啥也没有 1.jpg里面,空的
	int bytes;
	while ((bytes = recv(hClntSock, buf, 1024, 0)) > 0)
	{
    
    
		fwrite(buf, 1, bytes,fp);
	}
	fclose(fp);
	closesocket(hClntSock);
	closesocket(hServSock);


	//while (1);
	WSACleanup(); //别忘了清理和释放内存空间
	return 0;

}

猜你喜欢

转载自blog.csdn.net/Lancelot38/article/details/122452233