原始套接字 建立TCP连接的过程

SmarterYu 2013-04-08 08:48:53
我想用原始套接字写的客户端与流套接字写的服务器端建立连接,但是不知道为什么就是建立不起来……而且非常不明白的是,客户端的connect函数调用的返回值为0(成功),但是服务器端却没有反映....之后我又随便写了一个不存在的IP地址试了一下,还是那个情况,居然返回0?这是为什么呢?求大牛帮助解答一下吧,不胜感谢!!!
附客户端的源代码,服务器端就是用流套接字正常写的,就不粘了
#include<stdio.h>
#include<unistd.h>
#include<netinet/in.h>
#include<sys/socket.h>
#include<sys/types.h>
#include<arpa/inet.h>
#include<netinet/ip.h>
#include<netinet/tcp.h>

#define DESTADDR "127.0.0.1"
#define DESTPORT 6666
#define MYPORT 8888
#define MAXLINE 512


int main()
{
int sockfd;
struct sockaddr_in addr;

bzero(&addr,sizeof(struct sockaddr_in));
addr.sin_family=AF_INET;
addr.sin_port=htons(DESTPORT);
inet_aton(DESTADDR,&addr.sin_addr);

sockfd=socket(AF_INET,SOCK_RAW,IPPROTO_TCP);
if(sockfd<0)
{
perror("Socket created error!\n");
exit(1);
}
else
{
printf("Socket created successfully!\n");
}

setuid(getuid);

int n;
if((n=connect(sockfd,(struct sockaddr*)&addr,sizeof(struct sockaddr)))<0)
{
printf("Connect failed!\n");
exit(1);
}
else
{
printf("Connect successfully!%d\n",n);
}

struct tcphdr *tcp;
int head_len;
char buff[MAXLINE];

head_len=sizeof(struct tcphdr);
bzero(buff,MAXLINE);

tcp=(struct tcphdr *)(buff);
tcp->source=htons(MYPORT);
tcp->dest=addr.sin_port;
tcp->seq=10;
tcp->ack_seq=0;
tcp->doff=5;
tcp->ack=1;
//tcp->syn=1;
tcp->check=0;

int i=0;
for(i=0;i<10;i++)
{
buff[head_len+i]='1';
}
buff[head_len+i]='\0';

printf("Write :\t%s\n",buff);
write(sockfd,buff,strlen(buff));

return 0;
}
...全文
155 回复 打赏 收藏 转发到动态 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复

3,881

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 其它技术问题
社区管理员
  • 其它技术问题社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧