| 查询指定的域名地址对应的 IP 地址,返回一个 hostent结构的指针,如果不成功返回 NULL。
int_socket(int domain,int_type,int protocol); 函数 socket 创建一个套接字描述符,如果失败返回 -1。domain 为地址类型,type为套接字类型,本题中为 SOCK_STREAM ;protocol 指定协议,本题中为 0 。 int connect( int sockfd,struct sockaddr *servaddr, int addrlen); 函数connect与服务器建立一个连接,成功返回 0,失败返回- 1。servaddr 为远程服务器的套接字地址,包括服务器的 IP 地址和端口号;addrlen 为地址的长度。 int read( int fd,char *buf,int len); int write( int fd,char *buf,int len); 函数read和write从套接字读和写数据,成功返回数据量大小,否则返回 -1。buf 指定数据缓冲区,len 指定接收或发送的数据量大小。 【socket程序】 //程序中引用的头文件略 #define PORT 3490 //定义端口号为 3490 int main( int argc,char *argv[] ) { int sockfd,nbytes; //套接字描述符、读入缓冲区的字节数 char buf[1024]; //缓冲区 struct hostent *he; //主机信息类型 struct sockaddr_in srvaddr;//Internet套接字结构 if ( __(1)__ ) { perror( "调用参数为零,请输入服务器的主机名!\n" ); exit(1);} if ( __(2)__ ) //如果通过主机名没有获得对应的主机信息就提示用户 { perror("无法通过主机名获得主机信息!\n" ); exit(1);} if ( __(3)__ ) //在无法创建套接字时,提示用户 { perror("无法创建套按字!\n" ); exit(1);} bzero( &srvaddr,sizeof(srvaddr));//置空 srvaddr srvaddr,sin_family = AF_INET; srvaddr,sin_port:__(4)__ ;srvaddr.sin_addr:__(5)__ ; //设置套接字结构的各项信息,其中的地址来自于域名查询后的 hp 变量 if ( connect( sockfd,__(n)__ ,sizeof( struct sockaddr)) == -1 ) { perror("连接失败!\n" ); exit(1);} //连接服务器,如果失败则提示用户 if (( nbytes = read ( sockfd,buf,MAXDATASIZE)) == -1 ) { perror( "读失败!\n" ); exit(1);} //从套容接字中读出数据 buf[nbytes] = '\0'; printf("读到的内容:%s",buf) ; close( sockfd) ; //打印数据并关闭套接字 }
上一页 [1] [2] [3] |