ubuntu本地sock通信和网络socket通信

前端之家收集整理的这篇文章主要介绍了ubuntu本地sock通信和网络socket通信前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

编译环境:ubuntu14.04

@H_502_9@

本地socket通信

client程序:

#include <stdio.h>@H_502_9@ #include <sys/types.h>@H_502_9@ #include <sys/socket.h>@H_502_9@ #include <string.h>@H_502_9@ #include <stdlib.h>@H_502_9@ #include <sys/un.h>@H_502_9@ @H_502_9@ /*@H_502_9@ 程序里包含服务端和客户端两个程序,它们之间使用 AF_UNIX 实现本机数据流通信。使用 AF_UNIX 域实际上是使用本地 socket 文件来通信。@H_502_9@ */@H_502_9@ @H_502_9@ int main()@H_502_9@ {@H_502_9@ int sockfd,ret,send_num,send_num_total=0;@H_502_9@ char buf[]="this is my socket data.11111111111111111";@H_502_9@ printf("size:%d",(int)sizeof(buf));@H_502_9@ struct sockaddr_un server_addr;@H_502_9@ memset(&server_addr,sizeof(server_addr));@H_502_9@ server_addr.sun_family=AF_UNIX;@H_502_9@ strcpy(server_addr.sun_path,"test.socket");@H_502_9@ sockfd=socket(AF_UNIX,SOCK_STREAM,0);@H_502_9@ if (sockfd<0)@H_502_9@ {@H_502_9@ printf("调用socket函数建立socket描述符出错!\n");@H_502_9@ exit(1);@H_502_9@ }@H_502_9@ printf("调用socket函数建立socket描述符成功!\n");@H_502_9@ ret=connect(sockfd,(struct sockaddr *)(&server_addr),sizeof(server_addr));@H_502_9@ if (ret<0)@H_502_9@ {@H_502_9@ printf("调用connect函数失败,客户端连接服务器失败!\n ");@H_502_9@ exit(2);@H_502_9@ }@H_502_9@ printf("调用connect函数成功,客户端连接服务器成功!\n");@H_502_9@ while (1)@H_502_9@ {@H_502_9@ send_num=send(sockfd,buf,sizeof(buf),MSG_DONTWAIT);@H_502_9@ if (send_num<0)@H_502_9@ printf("调用send函数失败!");@H_502_9@ else@H_502_9@ {@H_502_9@ send_num_total+=send_num;@H_502_9@ printf("调用send函数成功,本次发送%d个字节,内容为:%s。目前共发送了%d个字节的数据。\n",send_num_total);@H_502_9@ }@H_502_9@ sleep(2);@H_502_9@ break;@H_502_9@ }@H_502_9@ }@H_502_9@

@H_502_9@

server端程序

#include <stdio.h>@H_502_9@ #include <sys/types.h>@H_502_9@ #include <sys/socket.h>@H_502_9@ #include <string.h>@H_502_9@ #include <stdlib.h>@H_502_9@ #include <sys/un.h>@H_502_9@ int main()@H_502_9@ {@H_502_9@ int sockfd,newfd,recv_num = 0,recv_num_total=0;@H_502_9@ int recv_num1 = 0;@H_502_9@ char buf[50] = {0};@H_502_9@ char buf1[50] = {0};@H_502_9@ struct sockaddr_un server_addr;@H_502_9@ remove("test.socket");/*不管有没有,先删除一下,否则如果该文件已经存在的的话,bind会失败。*/@H_502_9@ memset(&server_addr,0);@H_502_9@ if (sockfd<0)@H_502_9@ {@H_502_9@ printf("调用socket函数建立socket描述符出错!\n");@H_502_9@ exit(1);@H_502_9@ }@H_502_9@ printf("调用socket函数建立socket描述符成功!\n");@H_502_9@ ret=bind(sockfd,sizeof(server_addr));@H_502_9@ if (ret<0)@H_502_9@ {@H_502_9@ printf("调用bind函数绑定套接字与地址出错!\n");@H_502_9@ exit(2);@H_502_9@ }@H_502_9@ printf("调用bind函数绑定套接字与地址成功!\n");@H_502_9@ ret=listen(sockfd,4);@H_502_9@ if (ret<0)@H_502_9@ {@H_502_9@ printf("调用listen函数出错,无法宣告服务器已经可以接受连接!\n");@H_502_9@ exit(3);@H_502_9@ }@H_502_9@ printf("调用listen函数成功,宣告服务器已经可以接受连接请求!\n");@H_502_9@ newfd=accept(sockfd,NULL,NULL);/*newfd连接到调用connect的客户端*/@H_502_9@ if (newfd<0)@H_502_9@ {@H_502_9@ printf("调用accept函数出错,无法接受连接请求,建立连接失败!\n");@H_502_9@ exit(4);@H_502_9@ }@H_502_9@ printf("调用accept函数成功,服务器与客户端建立连接成功!\n");@H_502_9@ while (1)@H_502_9@ {@H_502_9@ recv_num=recv(newfd,10,0);@H_502_9@ recv_num1=recv(newfd,buf1,31,0);@H_502_9@ if (recv_num<0)@H_502_9@ printf("调用recv接受失败!\n");@H_502_9@ else@H_502_9@ {@H_502_9@ recv_num_total+=recv_num;@H_502_9@ //printf("调用recv函数成功,本次接受到%d个字节,内容为:%s。共受到%d个字节的数据。\n",recv_num,recv_num_total);@H_502_9@ printf("recv data0: %s. recv data len0 %d\n",recv_num);@H_502_9@ printf("recv data1: %s. recv data len1 %d",recv_num1);@H_502_9@ }@H_502_9@ sleep(2);@H_502_9@ break;@H_502_9@ }@H_502_9@ }@H_502_9@

@H_502_9@

@H_502_9@

http://blog.csdn.net/ccwwff/article/details/45693469

猜你在找的Ubuntu相关文章