socket网络连接
来源:互联网 发布:建模软件哪个好 编辑:程序博客网 时间:2024/06/03 18:13
Socket Client Example
#include <stdio.h>#include <string.h>#include <stdlib.h>#include <sys/types.h>#include <sys/socket.h>#include <sys/un.h>#include <arpa/inet.h>#include <netinet/in.h>const int port = 5000; //服务器开放的端口号const char* ip = "10.10.12.95"; //服务器的ipint main(){ //创建套接字,即创建socket int clt_sock = socket(AF_INET, SOCK_STREAM, 0); if(clt_sock < 0) { //创建失败 perror("socket"); return 1; } //绑定信息,即命名socket struct sockaddr_in addr; addr.sin_family = AF_INET; // ipv4协议族 addr.sin_port = htons(port); // 指定目标机端口 并转化位网络自己顺序 addr.sin_addr.s_addr = inet_addr(ip); //inet_addr函数将把用点分十进制字符串表示的IPv4地址转化为用网络字节序整数表示的IPv4地址 socklen_t addr_len = sizeof(addr); int connect_fd = connect(clt_sock, (struct sockaddr*)&addr, addr_len); //发起连接 int connect_fd = connect(clt_sock, (struct sockaddr*)&addr, addr_len); if(connect_fd < 0) { perror("connect"); return 2; } while(1) { memset(buf, '\0', sizeof(buf)); printf("client please enter: "); fflush(stdout); ssize_t size = read(0, buf, sizeof(buf) - 1); if(size > 0) { buf[size - 1] = '\0'; } else if(size == 0) { printf("read is done...\n"); break; } else { perror("read"); return 4; } write(clt_sock, buf, strlen(buf)); size = read(clt_sock, buf, sizeof(buf)); if(size > 0) { buf[size] = '\0'; } else if(size == 0) { printf("read is done...\n"); break; } else { perror("read"); return 5; } printf("server: %s\n", buf); } close(clt_sock); return 0;}
Socket Server Example
#include <stdio.h>#include <string.h>#include <stdlib.h>#include <sys/types.h>#include <sys/socket.h>#include <sys/un.h>#include <arpa/inet.h>#include <netinet/in.h>const int port = 5000;const char* ip = "10.10.12.95"; int main(){ //创建套接字,即创建socket int ser_sock = socket(AF_INET, SOCK_STREAM, 0); if(ser_sock < 0) { //创建失败 perror("socket"); return 1; } //绑定信息,即命名socket struct sockaddr_in addr; addr.sin_family = AF_INET; addr.sin_port = htons(port); addr.sin_addr.s_addr = inet_addr(ip); if(bind(ser_sock, (struct sockaddr*)&addr, sizeof(addr)) < 0) { //绑定失败 perror("bind"); return 2; } //监听socket int listen_sock = listen(ser_sock, 5); // 5为内核为该套接字排队的最大连接个数 if(listen_sock < 0) { //监听失败 perror("listen"); return 3; } //接受连接 //系统调用从listen监听队列中接受一个连接 //int accept(int sockfd, struct sockaddr* addr, socklen_t* addrlen) //sockfd参数是执行过listen系统调用的监听socket;addr参数用来获取被 //接受连接的远端socket地址,该socket地址的长度由addrlen参数指出 //accept成功时返回一个新的连接socket,该socket唯一的标识了被接受 //的这个连接,服务器可通过读写该socket来与被接受连接对应的客户端通信 struct sockaddr_in peer; socklen_t peer_len = sizeof(struct sockaddr_in); // 这个初始化很重要 char buf[1024]; int accept_fd = accept(ser_sock, (struct sockaddr*)&peer, &peer_len); //在调用函数accept()的时候,服务器就处于睡眠状态,当客户机发来一个请求并完成三次握手后accept()函数苏醒并且返回表示客户端socket的描述符。 if(accept_fd < 0) { perror("accept"); return 4; } else { printf("connected with ip: %s and port: %d\n", inet_ntop(AF_INET,&peer.sin_addr, buf, 1024), ntohs(peer.sin_port)); } while(1) { memset(buf, '\0', sizeof(buf)); ssize_t size = read(accept_fd, buf, sizeof(buf) - 1); if(size > 0) { printf("client#: %s\n", buf); } else if(size == 0) { printf("read is done...\n"); break; } else { perror("read"); break; } printf("server please enter: "); fflush(stdout); size = read(0, buf, sizeof(buf) - 1); if(size > 0) { buf[size - 1] = '\0'; } else if(size == 0) { printf("read is done...\n"); break; } else { perror("read"); break; } write(accept_fd, buf, strlen(buf)); }close(ser_sock); return 0;}
另:
// 另一种读数据的方法 while ( (n = read(sockfd, recvBuff, sizeof(recvBuff)-1)) > 0) { .... } if(n < 0) { printf("\n Read error \n"); }
0 0
- 异步网络Socket连接
- cocos2dx socket 网络连接
- socket网络连接
- 基于Socket的网络连接
- Socket建立网络连接方法
- socket判断网络连接状态
- win32 Socket网络编程连接
- unity开发: socket网络连接
- 网络IPC, socket(3): 建立连接
- Android下使用Socket连接网络电脑
- 关于socket网络连接数杂谈
- 网络编程 socket serversocket连接问题
- IOS socket 判断网络连接(SCNetworkReachability)
- android(java) socket判断网络连接状态
- linux socket断开网络连接程序终止
- android(java) socket判断网络连接状态
- android(java) socket判断网络连接状态
- unity开发:TCP socket网络连接
- cmake相关
- [架构优化]webAPP优化解决办法
- Python爬虫入门(二)requests库
- mybatis打印sql语句到控制台
- java客户端程序获取外部spring配置文件
- socket网络连接
- Gitlab服务器迁移
- ITK中的水平集算法-快速步进分割
- 基于Xposed的一款脱壳神器ZjDroid工具原理解析
- Crontab的格式
- spring 事务传播方式
- 每天一个 Linux 命令(38):cal 命令
- JSP中foreach标签(JSTL)的使用
- 第五届省赛javaA组-星系炸弹