linux下C实现客户端服务器通信框架
来源:互联网 发布:股市九宫图软件 编辑:程序博客网 时间:2024/06/04 11:54
服务器端
首先等候客户连接请求,一旦连接成功则接受客户端发送过来的字符,采用带有头结点的链表方式存贮字符,每个结点存储一个字符,接着通过对链表实现插入删除操作,完成对字符的升序排序,最后将排序后字符发送给客户端。
客户端
首先与服务器相连,接着发送客户端名字,然后发送客户信息,接受到服务器发送来排序结果并且显示。
服务器端代码:server.c
#include <sys/types.h> #include <sys/socket.h> #include <stdio.h> #include <netinet/in.h> #include <arpa/inet.h> #include <unistd.h> #include <stdlib.h> #include <malloc.h>struct LNode { char data; struct LNode *next; }; //按升序创建链表,count为创建的链表的节点数目 struct LNode *create(int count,char cdata[]) { int i=0; struct LNode *pNode = NULL; struct LNode *pNewNode = NULL; struct LNode *head = NULL; head = (struct LNode*)malloc(sizeof(struct LNode)); head->next= NULL; for(i =0;i <count;i++) { pNewNode = (struct LNode*)malloc(sizeof(struct LNode));//分配节点空间 pNewNode->data=cdata[i]; pNewNode->next=NULL; if(head->next == NULL) //指定头结点 { head->next= pNewNode; // pNode = pNewNode; } else //有序插入{pNode=head;while(pNode->next!=NULL&&pNode->next->data<pNewNode->data){pNode=pNode->next;}pNewNode->next=pNode->next;pNode->next=pNewNode;} } return head; } int main() { int server_sockfd,client_sockfd; int server_len,client_len; struct sockaddr_in server_address; struct sockaddr_in client_address; int i,btye,j=0; int rleng=0,sleng=0; char char_recv[100],char_send[100]; struct LNode *node,*p; server_address.sin_family = AF_INET; server_address.sin_addr.s_addr = inet_addr("127.0.0.1"); server_address.sin_port = 8080; server_len = sizeof(server_address); server_sockfd = socket(AF_INET,SOCK_STREAM,0); bind(server_sockfd,(struct sockaddr *)&server_address,server_len); listen(server_sockfd,5); printf("server waiting for connect\n"); client_len = sizeof(client_address); client_sockfd = accept(server_sockfd,(struct sockaddr *)&client_address,(socklen_t *)&client_len); if(btye = recv(client_sockfd,&rleng,1,0) == -1) //收长度 { perror("recvleng"); exit(EXIT_FAILURE); } if(btye = recv(client_sockfd,&char_recv,rleng,0) == -1) //收数据 { perror("recv"); exit(EXIT_FAILURE); } printf("receive from client is:");while(j<rleng){//char_send[j]=char_recv[j]; printf("%c",char_recv[j++]); } printf("\n");node = create(rleng,char_recv); //处理发送数据j=0;p=node->next;while(p){ char_send[j++]=p->data; p=p->next; } sleng=j+1; if(btye = send(client_sockfd,&sleng,1,0) == -1) //发长度 { perror("sendleng"); exit(EXIT_FAILURE); } if(btye = send(client_sockfd,&char_send,sleng,0) == -1) //发数据 { perror("send"); exit(EXIT_FAILURE); } shutdown(client_sockfd,2); shutdown(server_sockfd,2); return 0; }
客户端代码:client.c
#include <sys/types.h> #include <sys/socket.h> #include <stdio.h> #include <netinet/in.h> #include <arpa/inet.h> #include <unistd.h> #include <stdlib.h> int main() { int sockfd; int len; struct sockaddr_in address; int result; int i,byte,j=0; int rleng=0,sleng=0; char char_recv[100],char_send[100]; if((sockfd = socket(AF_INET,SOCK_STREAM,0)) == -1) //socket套接字 { perror("socket"); exit(EXIT_FAILURE); } address.sin_family = AF_INET; address.sin_addr.s_addr = inet_addr("127.0.0.1"); address.sin_port = 8080; len = sizeof(address); if((result = connect(sockfd,(struct sockaddr *)&address,len)) == -1) //建立链接 { perror("connect"); exit(EXIT_FAILURE); } printf("please enter the context you want to send to server and the end of !:"); while(j<100 && char_send[j-1]!='!'){ //输入 scanf("%c",&char_send[j++]); } sleng=j-1; if(byte = send(sockfd,&sleng,1,0) == -1) //发长度 { perror("sendleng"); exit(EXIT_FAILURE); } if(byte = send(sockfd,&char_send,sleng,0) == -1) //发数据 { perror("send"); exit(EXIT_FAILURE); } if(byte = recv(sockfd,&rleng,1,0) == -1) //收长度 { perror("recv"); exit(EXIT_FAILURE); } if(byte = recv(sockfd,&char_recv,rleng,0) == -1) //收数据 { perror("recv"); exit(EXIT_FAILURE); } printf("receive from server is:");j=0;while(j<rleng){ printf("%c",char_recv[j++]); } printf("\n"); close(sockfd); //断开链接 exit(0); }
实验操作如图所示,先打开两个终端分别编译,就能进行相互通信了。
阅读全文
0 0
- linux下C实现客户端服务器通信框架
- 【C语言】linux下c语言 客户端服务器编程框架
- Linux C实现简单的UDP服务器客户端通信
- LINUX下如何创建TCP客户端和服务器,实现通信
- C语言实现服务器与客户端的socket通信运行在linux系统中
- C语言实现服务器与客户端的socket通信运行在linux系统中 .
- Linux 网络编程实现TCP协议下的服务器客户端通信
- Linux下通过socket通信实现客户端向服务器发送文件
- linux下socket编程 select实现非阻塞模式多台客户端与服务器通信
- linux下socket实现多个客户端与服务器的通信
- Linux下网络socket编程——实现服务器(select)与多个客户端通信
- linux下用多线程实现socket服务器和客户端的异步通信
- linux下实现服务器与客户端
- java服务器与linux c客户端之间udp通信
- Linux C——TCP客户端服务器通信
- Linux C——UDP通信服务器与客户端
- Linux环境下服务器和客户端的网络通信
- linux 下socket 服务器和客户端异步通信
- MATLAB数字图像处理(3)滤波
- 初测vgg16
- 一个男生如此深情却与我无关
- wxWidgets+CodeBlocks搭建环境
- c++拷贝构造函数(深拷贝,浅拷贝)详解
- linux下C实现客户端服务器通信框架
- 手机端下滑时隐藏标题栏
- 无法实现接口成员,因为它不是公共的-----------interface
- MOOC清华《VC++面向对象与可视化程序设计》第1章:空白窗口的创建(空项目)
- 反编译Unity3d 中的dll文件
- 理解ThreadLocal
- 浅拷贝和深拷贝的区别?
- 线段树 ACM-ICPC国际大学生程序设计竞赛北京赛区(2017)网络赛 HihoCoder 1586
- POJ-3190 Stall Reservations