目录

前言

一、网络的含义与构成

含义:

构成: 

二、网络的体系结构

1>OSI七层模型

2>TCP/IP协议体系结构 

3>数据经过体系结构,怎么封装? 

4>端口号

5>大小端序

6>TCP/UDP传输层的协议 

三、系统函数API学习框架(TCP)    

服务器(优先):

 客户端:

四、服务器和客户端代码实例 

总结


前言

网络编程是指使用编程语言进行网络通信的过程。通过网络编程,计算机可以通过互联网或局域网与其他计算机进行数据交换和通信。在网络编程中,程序员需要使用特定的网络编程接口和协议(如TCP/IP、HTTP等)来实现数据的发送和接收。网络编程常用于开发网络应用、远程服务和分    布式系统等。

网络编程具有以下几个重要的作用:

  1. 数据交换和通信:通过网络编程,计算机可以在网络上进行数据的发送和接收,实现信息的交换和通信。这对于实现远程服务、分布式系统以及网络应用等都非常重要。

  2. 分布式系统:通过网络编程,可以将多台计算机连接起来,形成一个分布式系统。在分布式系统中,不同计算机之间可以互相通信和协作,共享资源和处理任务,从而提高系统的可靠性、性能和扩展性。

  3. 网络应用开发:网络编程是开发网络应用(如Web应用、聊天室、在线游戏等)的基础。通过网络编程,可以实现服务器端和客户端之间的数据交互,从而实现用户与服务器的交互和信息的展示。

  4. 网络安全:网络编程也与网络安全密切相关。通过网络编程,可以实现加密、认证、防止信息泄漏等安全机制,保护网络通信的隐私和安全。

总之,网络编程为计算机之间的数据交换和通信提供了技术基础,成为了构建分布式系统、开发网络应用以及保障网络安全的重要手段。


一、网络的含义与构成

含义:

构成: 

二、网络的体系结构

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语言的其他重要的基础知识,感谢大家支持懒大王!

       希望这篇博客能给各位朋友们带来帮助,最后懒大王请来过的朋友们留下你们宝贵的三连以及关注,感谢你们!  

10-18 18:16