首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 操作系统 > UNIXLINUX >

TCP 套接字 连接拒绝异常 实在想不到什么有关问题

2013-03-29 
TCP 套接字 连接拒绝错误 实在想不到什么问题本帖最后由 usc_su 于 2013-03-26 05:10:33 编辑如题,请大家

TCP 套接字 连接拒绝错误 实在想不到什么问题
本帖最后由 usc_su 于 2013-03-26 05:10:33 编辑 如题,请大家给点意见,下面是client部分代码:

int GeneralTCP(){
int socketId1,socketId2;
int length1,length2;
char *s1,*s2;
struct sockaddr_in remote_addr1,remote_addr2;
printf("The General has TCP port 4229 and IP address 127.0.0.1\n");

//set addresses of captain1 and captain2
remote_addr1.sin_family=AF_INET;
remote_addr2.sin_family=AF_INET;
remote_addr1.sin_addr.s_addr=inet_addr("127.0.0.1"); 
remote_addr2.sin_addr.s_addr=inet_addr("127.0.0.1");
remote_addr1.sin_port=htons(21629); 
remote_addr2.sin_port=htons(21729); 
//open sockets for captain1 and captain2
if((socketId1=socket(PF_INET,SOCK_STREAM,0))<0)  
    {  
        perror("Captain1 socket establish");  
       return 1;  
    }  


//connect socket to remote addresses
if(connect(socketId1,(struct sockaddr *)&remote_addr1,sizeof(struct sockaddr_in))<0)  
{  
        perror("Captain1 socket connect");  
        return 1;  
    }  


//discrete which captain has higher chance
if(SR1 > SR2){
printf("<Captain1> has the highest probability of success\n");
s1 = "<Captain1> has started the Mission!!!!!!";
s2 = "<Captain2> is the back up for the mission!";
printf("Command to start the mission sent to <Captain1>\nCommand to be the backup for the mission sent to <Captain2>\n");
}
else{
printf("<Captain2> has the highest probability of success\n");
s1 = "<Captain1> is the back up for the mission!";
s2 = "<Captain2> has started the Mission!!!!!!";
printf("Command to start the mission sent to <Captain2>\nCommand to be the backup for the mission sent to <Captain1>\n");
}
//send messgage to captain1 and captain2 respectively
send(socketId1,s1,strlen(s1),0);  

//close sockets of captain1 and captain2
close(socketId1);
if((socketId2=socket(PF_INET,SOCK_STREAM,0))<0)  
    {  
        perror("Captain2 socket establish");  
       return 1;  
    }  
if(connect(socketId2,(struct sockaddr *)&remote_addr2,sizeof(struct sockaddr_in))<0)  
{  
        perror("Captain2 socket connect");  
        return 1;  
    }  
send(socketId2,s2,strlen(s2),0);
close(socketId2);
printf("End of Phase 3 for the General\n");


return 0;
}



下面是server部分代码:
int CaptainTCP(int flag){
int local_sockId;
    int client_sockId;
struct sockaddr_in local_addr;
    struct sockaddr_in client_addr;
int struct_size;
int message_len;
char buffer[1024];
//get struct size for further usage
    struct_size=sizeof(struct sockaddr_in);  
//set address 
memset(&local_addr,0,sizeof(local_addr));  
local_addr.sin_family=AF_INET;  
        local_addr.sin_addr.s_addr= inet_addr("127.0.0.1"); ;
//If captain1, then port is 21629(21200+429)
if(flag == 1){
printf("captain1 hotns\n");
   local_addr.sin_port=htons(21629); 
printf("<Captain%d> has TCP port 21629 and IP address 127.0.0.1\n",flag);
}
//If captain2, then port is 21729(21300+429)
else{
printf("captain2 hotns\n");
local_addr.sin_port=htons(21729); 
printf("<Captain%d> has TCP port 21729 and IP address 127.0.0.1\n",flag);
}
//establish socket 
if((local_sockId=socket(PF_INET,SOCK_STREAM,0))<0)  
    {    
        perror("local socket establish");  
        return 1;  
    }  
//bind socket to local address
if (bind(local_sockId,(struct sockaddr *)&local_addr,sizeof(struct sockaddr))<0)  
   {  
       perror("bind local address");  
        return 1;  
    }  
//listen request and limit queue's length to 10
listen(local_sockId,10);  
        //get connection requests from clients
if((client_sockId=accept(local_sockId,(struct sockaddr *)&client_addr,&struct_size))<0)  
    {  
        perror("accept request from general");  
        return 1;  
    }  
printf("<Captain%d> is now connected to General\n",flag);

//Receive message from general
while((message_len=recv(client_sockId,buffer,1024,0))>0)  
   {  
        buffer[message_len]='\0';  
    }  
printf("%s\n",buffer);
//close socket
close(local_sockId);  
   close(client_sockId);
printf("End of Phase 3 for <Captain%d>\n",flag);
return 0;
}

我的server是要一会进行fork操作的。
我也想过是不是因为fork问题,作出删除某种功能的测试后,发现不是,就是连接都连接不上,经过检查,发现服务器端相应端口的却在监听,我大致想的是问题出现客户端上,但是怎么看都发现不了问题,看大家有什么想法没有,能给我点意见。 socket tcp connection?refused 连接拒绝 套接字


[解决办法]
1.对应的log呢?
2.看到都连到本地的ip,是否有防火墙之类的,检查检查看看
[解决办法]

引用:
本帖最后由 usc_su 于 2013-03-26 05:10:33 编辑
            如题,请大家给点意见,下面是client部分代码:
C/C++ code?12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152……


wireshark或者tcpdump抓包,看包有没有发出去.

热点排行