Linux C socket传输结构体
来源:互联网 发布:互联网供应链金融数据 编辑:程序博客网 时间:2024/05/24 02:36
服务器端:
#include<stdio.h> #include<stdlib.h> #include<string.h> #include<sys/types.h> #include<sys/socket.h> #include<netinet/in.h> #include<arpa/inet.h> #define server_port 5000 #define MAXPENDING 1000 struct USERDATA { char name[30]; char passwd[30]; }; int HandleTCPClient(int clntSocket,struct USERDATA *userdata); int HandleTCPClient(int clntSocket,struct USERDATA *userdata) { char buffer[BUFSIZ]; ssize_t numBytesRcvd = recv(clntSocket,buffer,BUFSIZ-1,0); if(numBytesRcvd < 0) { fputs("recv() failed!\n",stderr); send(clntSocket,"false",(size_t)strlen("false"),0); return -1; } //printf("num = %d\n",strlen(buffer)); memcpy(userdata,buffer,sizeof(struct USERDATA)); // 第三个属性的长度不能超过第一个属性的存储空间否则会出现内存非法。 return 0; } void main() { int servSock; if((servSock = socket(AF_INET,SOCK_STREAM,IPPROTO_TCP)) < 0) { printf("socket() failed!\n"); exit(1); } struct sockaddr_in servAddr; memset(&servAddr,0,sizeof(servAddr)) ; servAddr.sin_family = AF_INET; servAddr.sin_addr.s_addr = htonl(INADDR_ANY); servAddr.sin_port = htons(server_port); if(bind(servSock,(struct sockaddr *)&servAddr,sizeof(servAddr)) <0) { printf("bind() failed!\n"); exit(1); } if(listen(servSock,MAXPENDING) < 0) { printf("listen() failed!\n"); exit(1); } for(;;) { struct sockaddr_in clntAddr; socklen_t clntAddrLen = sizeof(clntAddr); int clntSock = accept(servSock,(struct sockaddr *)&clntAddr,&clntAddrLen); if(clntSock < 0) { fputs("accpet() failed!\n",stderr); continue; } char clntName[INET_ADDRSTRLEN]; if(inet_ntop(AF_INET,&clntAddr.sin_addr.s_addr,clntName,sizeof(clntName)) == NULL) fputs("Unable to get client address!\n",stderr); struct USERDATA userdata; int result = HandleTCPClient(clntSock,&userdata); if(result < 0) { send(clntSock,"false",(size_t)strlen("false"),0); close(clntSock); } else { send(clntSock,"true",(size_t)strlen("true"),0); close(clntSock); puts(userdata.name); puts(userdata.passwd); } } }
客户端代码:
#include<stdio.h> #include<stdlib.h> #include<string.h> #include<unistd.h> #include<sys/types.h> #include<netinet/in.h> #include<arpa/inet.h> struct USERDATA { char name[30]; char passwd[30]; }; void DieWithUserMessage(const char *msg,const char *detail);//错误处理 void DieWithSystemMessage(const char *msg);//错误处理 void DieWithUserMessage(const char *msg,const char *detail){ fputs(msg,stderr); fputs(": ",stderr); fputs(detail,stderr); fputc('\n',stderr); exit(1); } void DieWithSystemMessage(const char *msg){ perror(msg); exit(1); } int main(){ char *servIP = "139.129.39.100"; in_port_t servPort = 5000; int sock = socket(AF_INET,SOCK_STREAM,IPPROTO_TCP); if(sock < 0) DieWithSystemMessage("socket() failed!\n"); struct sockaddr_in servAddr; memset(&servAddr,0,sizeof(servAddr)); servAddr.sin_family = AF_INET; int rtnVal = inet_pton(AF_INET,servIP,&servAddr.sin_addr.s_addr); if(rtnVal == 0) DieWithUserMessage("inet_pton() failed!","invalid address string"); servAddr.sin_port = htons(servPort); if(connect(sock,(struct sockaddr *)&servAddr,sizeof(servAddr)) < 0) DieWithSystemMessage("connect() failed!\n"); struct USERDATA userdata; memcpy(userdata.name,"kakarot",sizeof("kakarot")); memcpy(userdata.passwd,"1235656",sizeof("1235656")); puts(userdata.name); puts(userdata.passwd); ssize_t numBytes = send(sock,(char *)&userdata,sizeof(userdata),0); if(numBytes < 0) DieWithSystemMessage("send() failed!\n"); else if(numBytes != sizeof(userdata)) DieWithUserMessage("send()","sent unexpected number of bytes"); //unsigned int totalBytesRcvd = 0; fputs("Received: ",stdout); char buffer[BUFSIZ]; numBytes = recv(sock,buffer,BUFSIZ -1,0); if(numBytes < 0) DieWithSystemMessage("recv() failed!\n"); else if(numBytes == 0) DieWithUserMessage("recv()","connection closed prematurely!"); //totalBytesRcvd += numBytes; // puts(buffer); int creatResult = strcmp(buffer,"false"); if(creatResult > 0) { puts("true"); } else { puts("false"); } // fputs(buffer,stdout); fputc('\n',stdout); close(sock); exit(0);
0 0
- Linux C socket传输结构体
- Linux socket 传输和接受结构体
- 谈Socket传输结构体
- C++ socket传输结构体
- Java 与 C socket通信传输结构体消息/Java解析C语言结构体
- 【转】socket不能直接传输结构体!
- socket传输结构体send()
- Socket传输结构体数据注意事项
- windows和Linux之间socket传输结构体关于字节对齐产生的问题
- 单片机C语言 串口传输 结构体
- c#中利用结构体进行socket传输数据
- Socket网络传输(C#)
- Linux中用socket 传输视频
- Linux C 结构体
- c/c++通过socket发送结构体
- c/c++通过socket发送结构体
- c/c++通过socket发送结构体
- c/c++通过socket发送结构体
- springMVC+hibernate框架搭建异常
- Mongodb 索引
- ViewPager+fragment延时加载,懒加载(数据缓存)
- win10 UWP 申请微软开发者
- Word插入代码显示行号并高亮/着色显示
- Linux C socket传输结构体
- Java配置
- F2812 烧录Flash 锁死的解决方法
- Linq分组、用group子句进行分组
- MongoDB 数据操作
- ubuntu在win下安装的方法
- centos6下的lvm逻辑卷的管理
- Maven项目总是出现org.hibernate.HibernateException: /hibernate.cfg.xml not found错误的解决方法
- tableView contentInset的理解