日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > linux >内容正文

linux

Linux C Socket编程发送结构体、文件详解及实例

發布時間:2024/4/14 linux 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Linux C Socket编程发送结构体、文件详解及实例 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

利用Socket發送文件、結構體、數字等,是在Socket編程中經常需要用到的。由于Socket只能發送字符串,所以可以使用發送字符串的方式發送文件、結構體、數字等等。

本文:http://www.cnblogs.com/xudong-bupt/p/3496741.html

1.memcpy

  Copy block of memory。內存塊拷貝函數,該函數是標準庫函數,可以進行二進制拷貝數據。

  函數原型:?void * memcpy ( void * destination, const void * source, size_t num );

  函數說明:從source指向的地址開始拷貝num個字節到以destination開始的地址。其中destination與source指向的數據類型無關。

2.Socket傳輸

  使用memcpy將文件、結構體、數字等,可以轉換為char數組,之后進行傳輸,接收方在使用memcpy將char數組轉換為相應的數據。

?

下面的程序使用Socket傳輸結構體數據,由客戶端傳輸給服務器端。

傳輸的結構體為:

typedef struct {int ab;int num[1000000]; }Node;

服務器代碼:

1 #include<netinet/in.h> 2 #include<sys/types.h> 3 #include<sys/socket.h> 4 #include<stdio.h> 5 #include<stdlib.h> 6 #include<string.h> 7 8 #define HELLO_WORLD_SERVER_PORT 6666 9 #define LENGTH_OF_LISTEN_QUEUE 20 10 #define BUFFER_SIZE 1024 11 12 typedef struct 13 { 14 int ab; 15 int num[1000000]; 16 }Node; 17 18 int main(int argc, char **argv) 19 { 20 // set socket's address information 21 struct sockaddr_in server_addr; 22 bzero(&server_addr, sizeof(server_addr)); 23 server_addr.sin_family = AF_INET; 24 server_addr.sin_addr.s_addr = htons(INADDR_ANY); 25 server_addr.sin_port = htons(HELLO_WORLD_SERVER_PORT); 26 27 // create a stream socket 28 int server_socket = socket(PF_INET, SOCK_STREAM, 0); 29 if (server_socket < 0) 30 { 31 printf("Create Socket Failed!\n"); 32 exit(1); 33 } 34 35 //bind 36 if (bind(server_socket, (struct sockaddr*)&server_addr, sizeof(server_addr))) 37 { 38 printf("Server Bind Port: %d Failed!\n", HELLO_WORLD_SERVER_PORT); 39 exit(1); 40 } 41 42 // listen 43 if (listen(server_socket, LENGTH_OF_LISTEN_QUEUE)) 44 { 45 printf("Server Listen Failed!\n"); 46 exit(1); 47 } 48 49 while(1) 50 { 51 struct sockaddr_in client_addr; 52 socklen_t length = sizeof(client_addr); 53 54 int new_server_socket = accept(server_socket, (struct sockaddr*)&client_addr, &length); 55 if (new_server_socket < 0) 56 { 57 printf("Server Accept Failed!\n"); 58 break; 59 } 60 61 Node *myNode=(Node*)malloc(sizeof(Node)); 62 63 int needRecv=sizeof(Node); 64 char *buffer=(char*)malloc(needRecv); 65 int pos=0; 66 int len; 67 while(pos < needRecv) 68 { 69 len = recv(new_server_socket, buffer+pos, BUFFER_SIZE, 0); 70 if (len < 0) 71 { 72 printf("Server Recieve Data Failed!\n"); 73 break; 74 } 75 pos+=len; 76 77 } 78 close(new_server_socket); 79 memcpy(myNode,buffer,needRecv); 80 printf("recv over ab=%d num[0]=%d num[999999]=%d\n",myNode->ab,myNode->num[0],myNode->num[999999]); 81 free(buffer); 82 free(myNode); 83 } 84 close(server_socket); 85 86 return 0; 87 } View Code

客戶端代碼:

1 #include <sys/types.h> 2 #include <sys/socket.h> // 包含套接字函數庫 3 #include <stdio.h> 4 #include <netinet/in.h> // 包含AF_INET相關結構 5 #include <arpa/inet.h> // 包含AF_INET相關操作的函數 6 #include <unistd.h> 7 #include <string.h> 8 #include <stdlib.h> 9 #include <fcntl.h> 10 #include <sys/shm.h> 11 #include <pthread.h> 12 13 #define MYPORT 6666 14 #define BUFFER_SIZE 1024 15 16 typedef struct 17 { 18 int ab; 19 int num[1000000]; 20 }Node; 21 22 int main() 23 { 24 ///sockfd 25 int sock_cli = socket(AF_INET,SOCK_STREAM, 0); 26 27 struct sockaddr_in servaddr; 28 memset(&servaddr, 0, sizeof(servaddr)); 29 servaddr.sin_family = AF_INET; 30 servaddr.sin_port = htons(MYPORT); 31 servaddr.sin_addr.s_addr = inet_addr("127.0.0.1"); 32 33 if (connect(sock_cli, (struct sockaddr *)&servaddr, sizeof(servaddr)) < 0) 34 { 35 perror("connect"); 36 exit(1); 37 } 38 39 Node *myNode=(Node*)malloc(sizeof(Node)); 40 myNode->ab=123; 41 myNode->num[0]=110; 42 myNode->num[999999]=99; 43 44 int needSend=sizeof(Node); 45 char *buffer=(char*)malloc(needSend); 46 memcpy(buffer,myNode,needSend); 47 48 int pos=0; 49 int len=0; 50 while(pos < needSend) 51 { 52 len=send(sock_cli, buffer+pos, BUFFER_SIZE,0); 53 if(len <= 0) 54 { 55 perror("ERRPR"); 56 break; 57 } 58 pos+=len; 59 } 60 free(buffer); 61 free(myNode); 62 close(sock_cli); 63 printf("Send over!!!\n"); 64 return 0; 65 } View Code

服務器端執行輸出:

總結

以上是生活随笔為你收集整理的Linux C Socket编程发送结构体、文件详解及实例的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 欧美人妻一区二区三区 | 成人精品在线视频 | 深夜福利在线免费观看 | 久艹在线 | 欧美97 | 牛牛免费视频 | 国产精品秘 | 色久影院| 欧美一区二区在线免费观看 | 欧美sm凌虐视频网站 | 在线sese | 国产女人18水真多毛片18精品 | 男男一级淫片免费播放 | 肉肉av福利一精品导航 | 一边吃奶一边摸做爽视频 | 免费在线播放视频 | 亚洲图片88 | 免费视频久久 | 前任攻略在线观看免费完整版 | 国产一区二区三区四区五区在线 | 日日摸夜夜添狠狠添欧美 | 久久精品天堂 | 日韩中文字幕视频 | 亚洲国产精品激情在线观看 | 亚洲精品粉嫩小泬20p | av网站在线播放 | 好吊妞这里有精品 | 久久成人视屏 | 一区二区三区在线视频观看 | 在线国产不卡 | 男女洗澡互摸私密部位视频 | 亚洲最大看欧美片网站 | 国产区亚洲区 | 国产精品久久久久久久免费看 | 麻豆视频一区 | 欧美日韩国产精品一区 | 亚洲天堂中文在线 | 日韩av毛片在线观看 | 午夜视频一区二区三区 | 亚洲最黄视频 | 任你操精品 | 亚洲国产日韩精品 | 人妻精品一区二区在线 | 久久黄页 | 天天干干干 | 日本网站在线免费观看 | 国产精品久久福利 | 999www| 国产豆花视频 | 有码视频在线观看 | 国产丝袜一区二区三区 | 国产乱人 | 美日韩免费 | 青娱乐福利视频 | 白白色在线观看 | 国产三级在线免费 | 老司机久久精品视频 | 日韩美女视频在线 | 不许穿内裤随时挨c调教h苏绵 | 人人妻人人爽一区二区三区 | 女女同性女同一区二区三区九色 | 国产美女明星三级做爰 | 91婷婷 | 好看的中文字幕电影 | 国产福利影院 | 最新激情网站 | 中文字字幕在线中文 | 亚洲欧美乱综合图片区小说区 | 欧美一区二区在线观看视频 | 欧美性生活一区二区三区 | 亚洲精品偷拍 | 黄色第一网站 | 激情五月激情 | 日本一区二区三区视频在线 | 日韩女优在线视频 | www香蕉视频 | 久草资源在线播放 | 久久久视屏 | 国产欧美一区二区三区鸳鸯浴 | 99热这里 | 草草在线免费视频 | 性做久久久 | 午夜精品一区二区三区在线 | 成人音影| 老地方在线观看免费动漫 | 亚洲一区二区三区观看 | 日韩在线电影一区二区 | www九九热 | 久久久国产一区二区三区 | 国产日本在线播放 | 九九视频在线 | 国产三级av在线播放 | 黄网在线播放 | 99综合视频 | 草莓视频成人在线 | 精品少妇一二三区 | 奇米影视四色在线 | 国产精品欧美久久久久天天影视 | 免费不卡视频 |