1. 程式人生 > >回射服務器的客戶端

回射服務器的客戶端

網絡 轉化 fputs recv 地址 sock res int argv

#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是一個文件指針是一個標準輸出
}
}

回射服務器的客戶端