socket通信:客户端connect成功服务器不accep
2015-06-03 10:13
531 查看
服务器:
客户端:
} close(sockfd); return 1;}
这样的代码就是客户端连接成功,服务器端没有accept的情况,主要问题是客户端连接了,没有给服务器端发送任何信息,就不会有accept,如果发送了点消息,就会成功了!
#include <sys/socket.h> #include <netinet/in.h> #include <arpa/inet.h> #include <assert.h> #include <stdio.h> #include <unistd.h> #include <stdlib.h> #include <string.h> #include <errno.h> int main(int argc, char **argv){ if(argc <=2){ printf("usage: %s ip_address port_number\n", basename(argv[0])); return 1; } const char *ip = argv[1]; int port = atoi(argv[2]); struct sockaddr_in address; bzero(&address, sizeof(address)); address.sin_family = AF_INET; inet_pton(AF_INET, ip, &address.sin_addr); address.sin_port = htons(port); int sock = socket(PF_INET, SOCK_STREAM, 0); assert( sock >= 0); int ret = bind(sock, (struct sockaddr*)&address, sizeof(address)); assert(ret != -1); ret = listen(sock, 5); assert(ret != -1); sleep(20); struct sockaddr_in client; socklen_t client_addrlength = sizeof(client); int connectfd = accept(sock,(struct sockaddr*)&client,&client_addrlength); <pre name="code" class="cpp"> if(connectfd < 0){ printf("errno is: %d\n", errno); }else{ char remote[INET_ADDRSTRLEN]; printf("connected with ip: %s and port: %d\n", inet_ntop(AF_INET, &client.sin_addr, remote, INET_ADDRSTRLEN),ntohs(client.sin_port)); close(connectfd); } close(sock); return 0; }
客户端:
#include <sys/socket.h> #include <netinet/in.h> #include <arpa/inet.h> #include <assert.h> #include <stdio.h> #include <stdlib.h> #include <errno.h> #include <string.h> int main(int argc, char ** argv){ if(argc <= 2 ){ printf("usage: %s ip_address port_number\n", basename(argv[0])); return 1; } const char *ip = argv[1]; int port = atoi(argv[2]); struct sockaddr_in address; bzero(&address,sizeof(address)); address.sin_family = AF_INET; inet_pton(AF_INET, ip, &address.sin_addr); address.sin_port = htons(port); int sockfd= socket(AF_INET, SOCK_STREAM, 0); assert(sockfd >= 0); int ret = connect(sockfd, (struct sockaddr*)&address, sizeof(address)); switch(ret){ case 0: printf("ok\n"); break; /*<pre name="code" class="cpp"> case 0: { printf("ok\n"); const char *data = "123"; send(sockfd, data, strlen(data),0); break; }*/ case ECONNREFUSED: printf("port is not exsit!\n"); break; case ETIMEDOUT : printf("connect timeout!\n"); break; default : printf("other problem!\n"); break;
} close(sockfd); return 1;}
这样的代码就是客户端连接成功,服务器端没有accept的情况,主要问题是客户端连接了,没有给服务器端发送任何信息,就不会有accept,如果发送了点消息,就会成功了!
相关文章推荐
- 日经春秋 20150603
- 日经社説 20150603 やめたい危険な自転車の運転
- Unity3D开发 - 导出iOS项目
- 我的Cocos2d-x学习笔记(十八)CCGridAction
- BCB如何处理FORM、ScrollBox的鼠标滚轮事件
- android 代码混淆排除指定内部类
- T-sql 根据日期时间 按年份、月份、天来统计
- 10lession-if-else条件语句
- 5月全球搜索引擎市场:Bing重回第三 份额涨0.51%
- [基础]Ubuntu系统设置与基本操作
- 简易HTTP服务器(epoll模型ET版本)
- 天声人語 20150603
- Python+Django windows安装
- JavaScript 经典实例收集整理
- Spring Quartz简单例子,定时任务
- 常用文档官网
- linux命令学习(每天都会更新)
- 使用Adt自带的工具进行Android自动化测试(三)
- 高通AR增强现实多卡识别和扩展跟踪Unity
- 解析ISO8583报文实例