ubuntu_socket通信_g++
2016-01-21 18:24
267 查看
客户端将消息传送到服务端,在服务端显示
编译运行:
cd到程序所在文件夹
g++ sever.cpp -o sever
./sever
g++ client.cpp -o client
./client 127.0.0.1
参考:http://blog.csdn.net/hguisu/article/details/7445768/
sever.cpp
#include <unistd.h> #include<stdio.h> #include<stdlib.h> #include<string.h> #include<errno.h> #include<sys/types.h> #include<sys/socket.h> #include<netinet/in.h> #define DEFAULT_PORT 8000 #define MAXLINE 4096 int main(int argc, char** argv) { int socket_fd, connect_fd; struct sockaddr_in servaddr; char buff[4096]; int n; //初始化Socket if( (socket_fd = socket(AF_INET, SOCK_STREAM, 0)) == -1 ){ printf("create socket error: %s(errno: %d)\n",strerror(errno),errno); exit(0); } //初始化 memset(&servaddr, 0, sizeof(servaddr)); servaddr.sin_family = AF_INET; servaddr.sin_addr.s_addr = htonl(INADDR_ANY);//IP地址设置成INADDR_ANY,让系统自动获取本机的IP地址。 servaddr.sin_port = htons(DEFAULT_PORT);//设置的端口为DEFAULT_PORT //将本地地址绑定到所创建的套接字上 if( bind(socket_fd, (struct sockaddr*)&servaddr, sizeof(servaddr)) == -1){ printf("bind socket error: %s(errno: %d)\n",strerror(errno),errno); exit(0); } //开始监听是否有客户端连接 if( listen(socket_fd, 10) == -1){ printf("listen socket error: %s(errno: %d)\n",strerror(errno),errno); exit(0); } printf("======waiting for client's request======\n"); while(1){ //阻塞直到有客户端连接,不然多浪费CPU资源。 if( (connect_fd = accept(socket_fd, (struct sockaddr*)NULL, NULL)) == -1){ printf("accept socket error: %s(errno: %d)",strerror(errno),errno); continue; } //接受客户端传过来的数据 n = recv(connect_fd, buff, MAXLINE, 0); //向客户端发送回应数据 if(!fork()){ /*紫禁城*/ if(send(connect_fd, "Hello,you are connected!\n", 26,0) == -1) perror("send error"); close(connect_fd); exit(0); } buff = '\0'; printf("recv msg from client: %s\n", buff); close(connect_fd); } close(socket_fd); }
client.cpp
#include <unistd.h> #include<sys/types.h> #include<sys/socket.h> #include<netinet/in.h> #include <arpa/inet.h> #include <netdb.h> /*gethostbyname function */ #include<stdio.h> #include<stdlib.h> #include<string.h> #include<errno.h> #define MAXLINE 4096 int main(int argc, char** argv) { int sockfd, n,rec_len; char recvline[4096], sendline[4096]; char buf[MAXLINE]; struct sockaddr_in servaddr; if( argc != 2){ printf("usage: ./client <ipaddress>\n"); exit(0); } if( (sockfd = socket(AF_INET, SOCK_STREAM, 0)) < 0){ printf("create socket error: %s(errno: %d)\n", strerror(errno),errno); exit(0); } memset(&servaddr, 0, sizeof(servaddr)); servaddr.sin_family = AF_INET; servaddr.sin_port = htons(8000); if( inet_pton(AF_INET, argv[1], &servaddr.sin_addr) <= 0){ printf("inet_pton error for %s\n",argv[1]); exit(0); } if( connect(sockfd, (struct sockaddr*)&servaddr, sizeof(servaddr)) < 0){ printf("connect error: %s(errno: %d)\n",strerror(errno),errno); exit(0); } printf("send msg to server: \n"); fgets(sendline, 4096, stdin); if( send(sockfd, sendline, strlen(sendline), 0) < 0) { printf("send msg error: %s(errno: %d)\n", strerror(errno), errno); exit(0); } if((rec_len = recv(sockfd, buf, MAXLINE,0)) == -1) { perror("recv error"); exit(1); } buf[rec_len] = '\0'; printf("Received : %s ",buf); close(sockfd); exit(0); }
编译运行:
cd到程序所在文件夹
g++ sever.cpp -o sever
./sever
g++ client.cpp -o client
./client 127.0.0.1
参考:http://blog.csdn.net/hguisu/article/details/7445768/
相关文章推荐
- JSTL标签库简单学习
- UITabBarController+微博简单模拟1
- Eclipse DDT
- 工具推荐:禅道项目管理工具
- 开始使用博客,记录生活~
- ubuntu14.04下快捷方式的设置
- RxJava 入门
- CodeForces 163A Substring and Subsequence dp
- 闷骚的程序猿几大搞笑瞬间
- AD五种角色
- Unable to download JS bundle 解决方案
- Adobe全系列CC版 2014 Win+Mac 迅雷下载+网盘
- 用VMware 8安装Ubuntu 12.04详细过程(图解)
- 全局变量指针释放后未置空引发panic错误案例
- CentOS下Mariadb表名大小写的问题
- CentOS下Mariadb表名大小写的问题
- JAVA NIO实现服务端与客户端简单数据传输 JAVA NIO 之一
- 仿Android联系人SideBar排序,根据拼音A-Z字母快速导航联系人姓名,以及输入搜索条件过滤,显示姓名的文字图片,添加挤压动画
- CIDR地址分类
- 危机管理流程图