简单socket示例
来源:互联网 发布:windows 下载 编辑:程序博客网 时间:2024/04/29 23:15
最近在看redis的事件驱动相关的源码,使用epoll来做IO事件的注册和触发,所以先重新学习整理下socket编程。
打算总共写三篇文章
- 简单socket示例
- epoll socket
- redis的事件驱动
在实现之前先整理下接下来会用到的socket的接口 通过man查看各个接口的功能和参数
int socket(int domain, int type, int protocol); int bind(int socket, const struct sockaddr *address, socklen_t address_len); int listen(int socket, int backlog); int accept(int socket, struct sockaddr *restrict address, socklen_t *restrict address_len); int connect(int socket, const struct sockaddr *address, socklen_t address_len); ssize_t send(int socket, const void *buffer, size_t length, int flags); ssize_t recv(int socket, void *buffer, size_t length, int flags); int close(int fildes);
接下来做一个最简单的1对1的server和client的socket通信的模型示例
- server 启动等待连接
- client发起连接,
- serverd端响应并发送消息,
- client端接受并显示
//server #include <stdio.h>#include <sys/socket.h>#include <netinet/in.h>#include <string.h>#include <stdlib.h>#include <errno.h>int main(){ int socket_fd = 0; //create socket if((socket_fd = socket(AF_INET, SOCK_STREAM, 0)) < 0) { printf("create socket failed %s:%d\n", strerror(errno), errno); exit(1); } //init sockaddr struct sockaddr_in server_addr; server_addr.sin_family = AF_INET; server_addr.sin_port = htons(2323); server_addr.sin_addr.s_addr = inet_addr("127.0.0.1"); //bind if(bind(socket_fd, &server_addr, sizeof(server_addr)) < 0) { printf("bind failed %s:%d\n", strerror(errno), errno); exit(1); } //listen if(listen(socket_fd, 10) < 0) { printf("listen failed %s:%d\n", strerror(errno), errno); exit(1); } printf("The server is now ready to accept connections\n"); for(;;) { struct sockaddr_in client_addr; int client_size = sizeof(client_addr); //accpet int client_fd = accept(socket_fd, &client_addr, &client_size); printf("new client accept %d\n", client_fd); //send msg char *msg = "connect success\n"; send(client_fd, msg, strlen(msg) + sizeof(char), 0); close(client_fd); }}
//client#include <stdio.h>#include <sys/socket.h>#include <netinet/in.h>#include <string.h>#include <stdlib.h>#include <errno.h>int main(){ int socket_fd = 0; //create socket if((socket_fd = socket(AF_INET, SOCK_STREAM, 0)) < 0) { printf("create socket failed %s:%d\n", strerror(errno), errno); exit(1); } //init sockaddr struct sockaddr_in server_addr; server_addr.sin_family = AF_INET; server_addr.sin_port = htons(2323); server_addr.sin_addr.s_addr = inet_addr("127.0.0.1"); if(connect(socket_fd, &server_addr, sizeof(server_addr)) < 0){ printf("connect failed %s:%d\n", strerror(errno), errno); exit(1); } char recv_buf[100]; int left_len = 0; recv(socket_fd, recv_buf, 100, 0); printf("%s\n", recv_buf);}
0 0
- socket收发简单示例
- socket通信简单示例
- socket 简单聊天示例
- 简单socket通信示例
- JAVA socket 简单示例
- 简单的Socket示例
- 简单socket示例
- 简单的Socket示例
- socket编程简单示例
- PHP Socket 编程-简单示例
- PHP Socket 编程-简单示例
- Python socket 简单示例程序
- Linux简单Socket编程示例
- Socket(TCP)通信简单示例
- 简单的Java Socket示例
- Python 简单 Socket 编程示例
- 简单的java socket 示例
- windows socket简单编程示例
- 轻量级Java EE应用相关技术
- RxJava与Retrofit结合的最佳实践
- py-faster-rcnn demo.py解析
- ionic添加cordova插件-Progress
- web前端入门(一)--问题解决
- 简单socket示例
- centos6.5 vnc服务安装配置
- ArcMap中地图输出(Options)选项显示不完整
- em单位的理解和使用
- java链表
- gcc
- 淘宝复制别人店宝贝相关问题
- docker(13):alpinelinux安装jenkins
- Ubuntu开机自动挂载磁盘分区