目录
前言
网络编程是指使用编程语言进行网络通信的过程。通过网络编程,计算机可以通过互联网或局域网与其他计算机进行数据交换和通信。在网络编程中,程序员需要使用特定的网络编程接口和协议(如TCP/IP、HTTP等)来实现数据的发送和接收。网络编程常用于开发网络应用、远程服务和分 布式系统等。
网络编程具有以下几个重要的作用:
-
数据交换和通信:通过网络编程,计算机可以在网络上进行数据的发送和接收,实现信息的交换和通信。这对于实现远程服务、分布式系统以及网络应用等都非常重要。
-
分布式系统:通过网络编程,可以将多台计算机连接起来,形成一个分布式系统。在分布式系统中,不同计算机之间可以互相通信和协作,共享资源和处理任务,从而提高系统的可靠性、性能和扩展性。
-
网络应用开发:网络编程是开发网络应用(如Web应用、聊天室、在线游戏等)的基础。通过网络编程,可以实现服务器端和客户端之间的数据交互,从而实现用户与服务器的交互和信息的展示。
-
网络安全:网络编程也与网络安全密切相关。通过网络编程,可以实现加密、认证、防止信息泄漏等安全机制,保护网络通信的隐私和安全。
总之,网络编程为计算机之间的数据交换和通信提供了技术基础,成为了构建分布式系统、开发网络应用以及保障网络安全的重要手段。
一、网络的含义与构成
含义:
构成:
二、网络的体系结构
1.OSI七层模型
2.TCP/IP协议体系结构
3.数据经过体系结构,怎么封装?
4.端口号
5.大小端序
6.TCP/UDP传输层的协议
三、系统函数API学习框架(TCP)
服务器(优先):
1.创建socket套接字 (socket)
2.绑定自己的IP地址和端口号(bind)
3.监听 (listen)
4.等待客户端连接 (等待意味着“阻塞” accept)
客户端:
1.创建socket套接字与服务器相似
2.声明服务器所在的IP地址和端口号
3.主动连接服务器 (connect)
4.数据发送(send)
5.数据接收(recv)
四、服务器和客户端代码实例
//服务器代码
#include <stdio.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <arpa/inet.h>
#include <netinet/in.h>
#include <string.h>
int main(void)
{
//1>创建socket套接字
int serfd = socket(AF_INET,SOCK_STREAM,0);//1.选IPv4,2选TCP,3默认0
if(serfd<0) //错误判断
{
perror("socket");
return -1;
}
printf("创建出的socket的值为%d\n",serfd);
//2>绑定自己的IP地址和端口号
struct sockaddr_in my_addr;
my_addr.sin_family = AF_INET;//IPv4
my_addr.sin_port = htons(8888);//将linux小端转系统的大端
my_addr.sin_addr.s_addr =inet_addr("192.168.10.5");//注意将IP地址格式转为网络二进制,还有记得改成自己的linuxIP地址
int ret;
ret = bind(serfd,(struct sockaddr *)&my_addr,sizeof(my_addr));
//第二参将同族结构体强转为函数需要的结构体类型
if(ret<0) //错误判断
{
perror("bind");
return -1;
}
printf("serfd网络属性已成功配置!\n");
//3>监听
ret = listen(serfd,8);
if(ret<0) //错误判断
{
perror("listen");
return -1;
}
printf("监听已启动,保护服务器中^-^\n");
//4>等待客户端连接 阻塞
int clifd = accept(serfd,NULL,NULL);//accept接触阻塞后将产生一个与客户端通信的文件描述符
if(clifd<0) //错误判断
{
perror("accept");
return -1;
}
printf("创建出与客户端通信的文件描述符值为%d\n",clifd);
printf("有客户连接进来了!\n");
//5>数据的接收
char buf[30];
while(1)
{
#if 0
bzero(buf,sizeof(buf));
ret = recv(clifd,buf,sizeof(buf),0);//阻塞
printf("客户端说:%s\n",buf);
#endif
bzero(buf,sizeof(buf));
ret = recv(clifd,buf,sizeof(buf),0);//阻塞
if(ret<0)
{
perror("recv");
return -1;
}else if(ret == 0)
{
printf("客户带着小姨子跑了!\n");
return -1;
}else
{
printf("客户端说:%s\n",buf);
}
}
//6>关闭套接字
close(serfd);
close(clifd);
return 0;
}
//客户端代码
#include <stdio.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <arpa/inet.h>
#include <netinet/in.h>
#include <string.h>
int main(void)
{
//1>创建socket套接字
int sockfd = socket(AF_INET,SOCK_STREAM,0);
if(sockfd<0)
{
perror("socket");
return -1;
}
printf("创建出的socket的值为%d\n",sockfd);
//2>声明"服务器"所在的IP地址和端口号
struct sockaddr_in server;
server.sin_family = AF_INET;
server.sin_port = htons(8888);
server.sin_addr.s_addr = inet_addr("192.168.10.5");
printf("已经声明服务器的IP地址和端口号!\n");
//3>主动连接服务器
int ret = connect(sockfd,(struct sockaddr*)&server,sizeof(server));
if(ret<0)
{
perror("connect");
return -1;
}
printf("连接服务器成功,请进行操作!\n");
//4>数据发送
char buf[30];
while(1)
{
bzero(buf,sizeof(buf));
scanf("%s",buf);
send(sockfd,buf,strlen(buf),0);
}
//5>关闭文件描述符
close(sockfd);
return 0;
}
总结
本篇文章针对C/C++ 网络编程进行详细讲解,希望能够帮到大家!
以后还会给大家展现更多关于嵌入式和C语言的其他重要的基础知识,感谢大家支持懒大王!
希望这篇博客能给各位朋友们带来帮助,最后懒大王请来过的朋友们留下你们宝贵的三连以及关注,感谢你们!