码迷,mamicode.com
首页 > 其他好文 > 详细

回射服务器的客户端

时间:2017-09-16 17:08:49      阅读:205      评论:0      收藏:0      [点我收藏+]

标签:主机   三次握手   recv   协议   UI   int   add   通信   ip地址   

#include "unp.h"
int main(int argc,char**argv){
int sockfd;
struct sockaddr_in servaddr;
if(argc != 2)
err_quit("usage:tcpcli<IPaddress>");
sockfd = socket(AF_INET,SOCK_STREAM,0);
//SOCK_STRREAM为TCP协议,通信协议类型
bzero(&servaddr,sizeof(servaddr));
//置零,指针所指的前几位
servaddr.sin_family = AF_INET;
servaddr.sin_port = htons(SERV_PORT);
//将整数由主机字节顺序转变成网络字节顺序unp.h中为9877-->SERV_PORT
inet_pton(AF_INET,argv[1],&servaddr.sin_addr);
//将点十进制的IP地址,转化为二进制的ip地址,赋给第三个参数的指针所指
connect(sockfd,(SA*)&servaddr,sizeof(servaddr));
//连接过程详解,没调用bind(),内核会为套接字选择一个端口
//服务器调用Listen,accept(),
//客户用connect()来连接服务器,&servaddr,中含有ip和port连接服务器
//未bind()时,内核选定源ip和port
//为tcp协议时,connect()激发了三次握手,成功或者出错才会返回一个值
str_cli(stdin,sockfd);
//stdin作为输入的文件指针,int sockfd作为文件标识符
exit(0);
}

//////////////////////////////////////////

#include "unp.h"

void str_cli(FILE *fp,int sockfd)
{
char sendline[MAXLINE],recvline[MAXLINE];
//字符串最大的数组
while(fgets(sendline,MAXLINE,fp)!=NULL){
//sendline作为字符型指针,指向存储读入数据的缓冲区地址
//fp作为读取的流
writen(sockfd,sendline,strlen(sendline));
//按照文件的操作方式操作sockfd接口
//sendline缓冲区作为发出的缓冲区
if(readline(sockfd,recvline,MAXLINE)==0)
err_quit("str_cli:server terminanted prematurely");
//readline()作用
fputs(recvline,stdout);
//stdout是一个文件指针是一个标准输出
}
}

回射服务器的客户端

标签:主机   三次握手   recv   协议   UI   int   add   通信   ip地址   

原文地址:http://www.cnblogs.com/fenglongyu/p/7531628.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!