?? test12_8.txt
字號:
#include <string.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netdb.h>
#include <errno.h>
#include <arpa/inet.h>
#define PROTOCOL "tcp"
#define REQUEST "GET/HTTP/1.0\n\n"
int write_buffer(int fd,const void *buf,int count);
int saferead(int fd,void *buf,size_t count);
int safewrite(int fd,void *buf,size_t count);
int main(int argc,char *argv[ ]){
int sockid;
struct servent *serviceaddr;
struct hostent *hostaddr;
struct protoent *protocol;
struct sockaddr_in socketaddr;
char buffer[1024];
int count;
bzero((char *)&socketaddr,sizeof(socketaddr));
socketaddr.sin_family=AF_INET;
serviceaddr=getservbyname(argv[2],PROTOCOL);
if(!serviceaddr){
HandleError(0, "gerservbyname", "service resolution failed");
}
socketaddr.sin_port=serviceaddr->s_port;
hostaddr=gethostbyname(argv[1]);
if(!hostaddr){
HandleError(0, "gethostbyname", "host resolution failed");
}
memcpy(&socketaddr.sin_addr,hostaddr->h_addr,hostaddr->h_length);
protocol=getprotobyname(PROTOCOL);
if(!protocol){
HandleError(0, "getprotobyname", "protocol resolution failed");
}
sockid=socket(PF_INET,SOCK_STREAM,protocol->p_proto);
if(sockid<0){
HandleError(errno, "socket", "couldn’t create socket");
}
if(connect(sockid,&socketaddr,sizeof(socketaddr))<0){
HandleError(errno, "connect", "connect call failed");
}
write_buffer(sockid,REQUEST ,strlen(REQUEST));
while((count=saferead(sockid,buffer,sizeof(buffer)-1))){
write_buffer(1,buffer,count);
}
return 0;
}
int write_buffer(int fd,const void *buf,int count){
const void *pts=buf;
int status=0,n;
if(count<0)
return(-1);
while(status!=count){
n=safewrite(fd,pts+status,count-status);
if(n<0)
return(n);
status+=n;
}
return(status);
}
int saferead(int fd,void *buf,size_t count)
{
int retval;
retval=read(fd,buf,count);
if(retval==-1)
HandleError(errno,"read","read %d bytes from fd %d failed",(int)count,fd);
return retval;
}
int safewrite(int fd,void *buf,size_t count)
{
int retval;
retval=write(fd,buf,count);
if(retval==-1)
HandleError(errno,"write","write %d bytes from fd %d failed",(int)count,fd);
return retval;
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -