网络编程我个人感觉就有点像打电话一样(小白之见)
就是,每个人的电话号码就像电脑的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;
}