您的位置:首页 > 其它

socket通信:客户端connect成功服务器不accep

2015-06-03 10:13 531 查看
服务器:

#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,如果发送了点消息,就会成功了!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: