服务器端
1 #include <stdio.h>
2 #include <stdlib.h>
3 #include <sys/types.h>
4 #include <sys/socket.h>
5 #include <arpa/inet.h>
6 #include <errno.h>
7 #include <sys/unistd.h>
8 #include <sys/un.h>
9
10
11 #define PORT 33333
12 int main()
13 {
14 int sockfd;
15 int cfd;
16 int c_len;
17 struct sockaddr_in addr;
18 struct sockaddr_in c_addr;
19
20 sockfd = socket(AF_INET,SOCK_STREAM,0);
21
22 if(sockfd == -1)
23 {
24 perror("sock create error!\n");
25 exit(1);
26 }
27 printf("socket success!\n");
28
29 int opt=1;
30 setsockopt(sockfd,SOL_SOCKET,SO_REUSEADDR,&opt,sizeof(opt));
31
32
33 bzero(&addr,sizeof(struct sockaddr_in));
34 addr.sin_family=AF_INET;
35 addr.sin_port=htons(PORT);
36 addr.sin_addr.s_addr=inet_addr("192.168.211.128");
37
38 if(bind(sockfd,(struct sockaddr *)(&addr),sizeof(struct sockaddr_in))<0)
39 {
40 perror("bind error!\n");
41 exit(1);
42 }
43 printf("bind success!\n");
44
45 if(listen(sockfd,3)<0)
46 {
47 perror("listen error!\n");
48 exit(1);
49 }
50 printf("listen success!\n");
51
52 while(1)
53 {
54 bzero(&c_addr,sizeof(struct sockaddr_in));
55 c_len = sizeof(struct sockaddr_in);
56 printf("accepting........\n");
57
58 cfd = accept(sockfd,(struct sockaddr *)(&c_addr),&c_len);
59 if(cfd<0)
60 {
61 perror("accept error!\n");
62 exit(1);
63 }
64 printf("accept success!\n");
65
66 printf("port = %d ip = %s \n",ntohs(c_addr.sin_port),inet_ntoa(c_addr.sin_addr));
67 write(cfd,"hello",5);
68 }
69 return 0;
70 }
客户端
1 #include <stdio.h>
2 #include <stdlib.h>
3 #include <sys/types.h>
4 #include <sys/socket.h>
5 #include <arpa/inet.h>
6 #include <sys/unistd.h>
7 #include <sys/un.h>
8
9 #define PORT 33333
10
11 int main()
12 {
13 int sockfd;
14 struct sockaddr_in s_addr;
15
16 if((sockfd=socket(AF_INET,SOCK_STREAM,0))<0)
17 {
18 perror("socket error!\n");
19 exit(1);
20 }
21 printf("client socket success!\n");
22
23 bzero(&s_addr,sizeof(struct sockaddr_in));
24 s_addr.sin_family=AF_INET;
25 s_addr.sin_port=htons(PORT);
26 s_addr.sin_addr.s_addr=inet_addr("192.168.211.128");
27
28 if(connect(sockfd,(struct sockaddr *)(&s_addr),sizeof(struct sockaddr_in))<0)
29 {
30 perror("connect error!\n");
31 exit(1);
32 }
33
34 printf("connect success!\n");
35 char buffer[1024];
36 read(sockfd,buffer,sizeof(buffer));
37 printf("recv server : %s \n",buffer);
38 return 0;
39 }
课堂笔记
- 互斥锁
pthread_mutex_t mutex;全局变量
pthread_mutex_init(&mutex,NULL); 初始化锁
pthread_mutex_lock(&mutex); 上锁
pthread_mutex_unlock(&mutex); 解锁 - 网络编程:
-
进程解决的是本机内通信,网络通信解决的是任意不同机器的通信。
-
网络通信需要的支持:通信设备:网卡路、由器、光纤。通信协议:操作系统自带协议栈,裸机开发需要独立的协议栈。
-
Linux四层模型
应用层
传输层
网际层
网络接口 -
OSI七层网络模型:
物理层
数据链路层网络层 IP\ICMP\ARP\RARP\
传输层 TCP\UDP
会话层SMTP
表示层 TELNET\SNMP
应用层TFTP\FTP\NFS\WAIS -
分层好处:灵活性好,易于实现和维护
-
子网掩码:决定一个网段的大小
-
DNS:把域名解析成IP地址,或把IP地址解析为域名。
-
IP找主机,端口号找应用程序TCP
-
端口号 21:FTP 22:Ssh
-
校验数据:奇偶校验 CRC循环冗余 BCC异或校验 海明码校验
项目开发日报表
项目名称 | 【苏嵌实训-嵌入式 linux C 第 8 天】 |
---|---|
今日进度 以及任务 | 1.了解网络编程相关概念2.创建客户端服务器端 |
本日任务完成情况 | 已完成 |
本日开发中出现的问题汇总 | 1. Socket operation on non-socket 错误,在if中要将较长条件用括号括起来2.bind error:用ifconfig命令查看主机IP设置一下 |
本日未解决问题 | |
本日开发收获 | 掌握了C/S方式的基本原理,可以在linux下创建服务器和客户端,并建立连接、发送数据 |
其他 |