ubuntu_socket通信_g++编译
2016-01-21 22:15
323 查看
sever.cpp
client.cpp
编译
g++ sever.cpp -o sever
g++ client.cpp -o client
$ ./server
Socket id = 3
Bind success!
Listening....
Received a message: Hello,Server!
$ ./client localhost(或者输入IP地址) Hello,Server!
接收到后程序停止
http://www.eefocus.com/embedded/322834/r0
#include <unistd.h> #include <arpa/inet.h> /* inet(3) functions */ #include <sys/types.h> #include <sys/socket.h> #include <stdio.h> #include <stdlib.h> #include <errno.h> #include <string.h> #include <unistd.h> #include <netinet/in.h> #define PORT 4321 #define BUFFER_SIZE 1024 #define MAX_QUE_CONN_NM 5 int main() { struct sockaddr_in server_sockaddr,client_sockaddr; socklen_t sin_size,recvbytes; int sockfd,client_fd; char buf[BUFFER_SIZE]; //建立socket连接 if((sockfd = socket(AF_INET,SOCK_STREAM,0))==-1) { perror("socket"); exit(1); } printf("Socket id = %d\n",sockfd); //设置sockaddr_in结构体中相关参数 server_sockaddr.sin_family =AF_INET; server_sockaddr.sin_port=htons(PORT); server_sockaddr.sin_addr.s_addr=INADDR_ANY; bzero(&(server_sockaddr.sin_zero),8); int i=1;//允许重复使用本地址与套接字进行绑定 setsockopt(sockfd,SOL_SOCKET,SO_REUSEADDR,&i,sizeof(i)); //绑定函数bind if(bind(sockfd,(struct sockaddr *)&server_sockaddr,sizeof(struct sockaddr))==-1) { perror("bind"); exit(1); } printf("Bind success!\n"); //调用Listen函数,创建为处理请求的队列 if(listen(sockfd,MAX_QUE_CONN_NM)==-1) { perror("listen"); exit(1); } printf("Listening....\n"); //调用accept()函数,等待客户端的连接 if((client_fd=accept(sockfd,(struct sockaddr*)&client_sockaddr,&sin_size))==-1) { perror("accept"); exit(1); } memset(buf,0,sizeof(buf)); //调用recv()函数,接收客户端的请求 if((recvbytes = recv(client_fd,buf,BUFFER_SIZE,0))==-1) { perror("recv"); exit(1); } printf("Received a message: %s\n",buf); close(sockfd); //exit(0); return 0; }
client.cpp
#include <unistd.h> #include <arpa/inet.h> /* inet(3) functions */ #include <netdb.h> /*gethostbyname function */ #include <stdio.h> #include <stdlib.h> #include <errno.h> #include <string.h> #include <netdb.h> #include <sys/types.h> #include <netinet/in.h> #include <sys/socket.h> #define PORT 4321 #define BUFFER_SIZE 1024 int main(int argc,char *argv[]) { int sockfd,sendbytes; char buf[BUFFER_SIZE]; struct hostent *host; struct sockaddr_in serv_addr; if(argc<3) { fprintf(stderr,"USAGE:./client Hostname(or ip address) Text\n"); exit(1); } //地址解析函数 host=gethostbyname(argv[1]); if(host==NULL) { perror("gethostname"); exit(1); } memset(buf,0,sizeof(buf)); sprintf(buf,"%s",argv[2]); //创建socket if((sockfd =socket(AF_INET,SOCK_STREAM,0))==-1) { perror("socket"); exit(1); } //设置sockaddr_in结构体中相关参数 serv_addr.sin_family=AF_INET; serv_addr.sin_port=htons(PORT); serv_addr.sin_addr=*((struct in_addr*)host->h_addr); bzero(&(serv_addr.sin_zero),8); //调用connect函数主动发出对服务端的连接 if(connect(sockfd,(struct sockaddr*)&serv_addr,sizeof(struct sockaddr))==-1) { perror("Connect"); exit(1); } //发送消息给服务端 if((sendbytes = send(sockfd,buf,strlen(buf),0))==-1) { perror("Send"); exit(1); } close(sockfd); exit(0); }
编译
g++ sever.cpp -o sever
g++ client.cpp -o client
$ ./server
Socket id = 3
Bind success!
Listening....
Received a message: Hello,Server!
$ ./client localhost(或者输入IP地址) Hello,Server!
接收到后程序停止
http://www.eefocus.com/embedded/322834/r0
相关文章推荐
- centos 7 systemd 与docker的冲突
- 蓝懿IOS学习核心动画和UIImagePicker
- ViewPager简单实用以及如何移除当前的Fragment
- bfs和dfs 模板
- Django + mysql
- iOS开发Block的使用
- 为什么需要bootloader
- 一入程序深似海
- String 类常用方法(1)
- android studio使用教程(八) 如何在project中删除module
- ubuntu 如何安装tomcat
- IOS使用Jenkins进行持续集成
- Web技术是开发iOS和Android App
- 欢迎使用CSDN-markdown编辑器
- [转载]TFS测试管理
- ThreadLocal类的实现用法
- leetcode之plus One
- POJ 3468 A Simple Problem with Integers
- iOS开发 UItextFielddialing方法详解
- String 类型的==和equals的区别