socker编程实现一个server收到client的信息
来源:互联网 发布:市场数据分析 编辑:程序博客网 时间:2024/05/01 02:51
- 列表内容
IDE: Clion 2017.01
OS:Ubuntu 16.04 xenial
Main reference: http://blog.chinaunix.net/uid-27007072-id-3390521.html
先打开server.cpp, 连接client收到对方的消息,点到点连接,一对一。
server.cpp 共7步,开头结尾为建立与关闭socket
***#include <iostream>#include <stdio.h> #include <stdlib.h> #include <string.h> #include <errno.h> #include <sys/socket.h> #include <arpa/inet.h> #include <netinet/in.h> #include <sys/types.h> #include <unistd.h> #include <sys/time.h> using namespace std;#define BUFLEN 1024 //缓冲区长度#define PORT 6666#define LISTNUM 20 //等待连接队列的最大长度int main() { int sockfd, newfd; struct sockaddr_in s_addr, c_addr; char buf[BUFLEN]; socklen_t len; unsigned int port, listnum; fd_set rfds; //Local variable is never used struct timeval tv; int retval,maxfd; //Local variable is never used /*1.建立socket*/ if((sockfd = socket(PF_INET, SOCK_STREAM, 0)) == -1){ //PF 表示PROTOCL FAMILY 协议族 // SOCK_STREAM 表示采用TCP协议 // 0是通常的默认情况 perror("socket"); exit(errno); }else printf("socket create success!\n"); /*2.准备通信地址*/ memset(&s_addr,0,sizeof(s_addr)); s_addr.sin_family = AF_INET; //sin_family协议族,AF_INET采用TCP/IP协议 s_addr.sin_port = htons(PORT); // socket对应的端口 s_addr.sin_addr.s_addr = htons(INADDR_ANY); //INADDR_ANY对本机所有IP有效,INADDR_ANY相当 于inet_addr("0.0.0.0");*** //1.2两步与client相同 /*3.绑定socket与通信地址 */ if((bind(sockfd, (struct sockaddr*) &s_addr,sizeof(struct sockaddr))) == -1){ perror("bind"); exit(errno); }else printf("bind success!\n"); //绑定成功 /*4.监听(等待连接)*/ if(listen(sockfd,listnum) == -1){ perror("listen"); exit(errno); }else printf("the server is listening!\n"); socklen_t _size = sizeof(struct sockaddr); /*5.accept函数(连接)*/ newfd = accept(sockfd,(sockaddr*)&c_addr,&_size); /*6.连接成功,把accept返回的socket描述符当做文件描述符进行操作,可以用四个函数,write,read,send,recv,*/ if(newfd < 0){ cout<<"accept failed."<<endl; } while(1){ cout<<"recv"<<endl; len = recv(newfd,buf,BUFLEN,0); buf[len] = '\0'; cout<<buf<<endl; } /*7.关闭socket描述符*/ close(sockfd); return 0;}
client.cpp 共五步,开头结尾为建立与关闭socket
***#include <iostream>#include <stdio.h> #include <stdlib.h> #include <string.h> #include <errno.h> #include <sys/socket.h> #include <arpa/inet.h> #include <netinet/in.h> #include <sys/types.h> #include <unistd.h> #include <sys/time.h> using namespace std;#define BUFLEN 1024 //缓冲区长度#define PORT 6666#define LISTNUM 20 //等待连接队列的最大长度int main() { int sockfd, newfd; struct sockaddr_in s_addr, c_addr; char buf[BUFLEN]; socklen_t len; unsigned int port, listnum; fd_set rfds; //Local variable is never used struct timeval tv; int retval,maxfd; //Local variable is never used /*1.建立socket*/ if((sockfd = socket(PF_INET, SOCK_STREAM, 0)) == -1){ //PF 表示PROTOCL FAMILY 协议族 // SOCK_STREAM 表示采用TCP协议 // 0是通常的默认情况 perror("socket"); exit(errno); }else printf("socket create success!\n"); /*2.准备通信地址*/ memset(&s_addr,0,sizeof(s_addr)); s_addr.sin_family = AF_INET; //sin_family协议族,AF_INET采用TCP/IP协议 s_addr.sin_port = htons(PORT); // socket对应的端口 s_addr.sin_addr.s_addr = htons(INADDR_ANY); //INADDR_ANY对本机所有IP有效,INADDR_ANY相当 于inet_addr("0.0.0.0");***//上面1.2与server相同 /*3.建立连接connect*/ if(connect(sockfd,(struct sockaddr*)&s_addr,sizeof(struct sockaddr)) == -1){ perror("connect"); exit(errno); }else printf("conncet success!\n");/*4.类似于server中的第六步,连接成功,把accept返回的socket描述符当做文件描述符进行操作*/ while(1){ int ret = send(sockfd,"hello",strlen("hello"),0); if(ret < 0){ cout<<"send failed."<<endl; } else cout<<"send successful! "<<endl; sleep(1); //暂停1秒 } /*4.关闭连接*/ close(sockfd); //关闭socket return 0;}
阅读全文
0 0
- socker编程实现一个server收到client的信息
- Linux环境下的socker编程
- 一个java网络编程Socket的例子,实现Server与Client聊天
- java socker编程实例
- SAP JCo的Server/Client编程实例
- SAP JCo的Server/Client编程实例
- 一个简单的server和client程序
- 套接字编程3 ------ 一个面向连接的SERVER/CLIENT综合实例
- Thrift使用入门(2) - 用Thrift实现一个简单的Server/Client应用程序
- JAVA SOCKET 实现多线程文件传输(Server端的多线程,Client一次只有一个)
- 基于I/O的Server/Client实现
- Python 实现的简单server-client demo
- Java实现基础的client/server模型
- 实现Server和client端的通信
- socker的基础知识(二)
- 【Socket编程】使用C++实现Server端和Client端
- socket client传文件到server,server端接收成功后给客户端反馈一个信息
- Netty server-client 实现
- 34
- fatal error C1083 分析
- redheat 上python 版本切换后导致yum用不了
- 层次聚类以及k-means算法
- 35
- socker编程实现一个server收到client的信息
- java学习路线图
- ubuntu dpkg 处理软件包适时出错,该包正处于非常不稳定的状态
- 关于ionic
- 手机cpu天梯图
- 初识大数据
- 20170718
- com.mysql.jdbc.MysqlDataTruncation: Data truncation: Truncated incorrect DOUBLE value
- CentOS 6.6 x64安装TensorFlow