?? client.c
字號:
#include <sys/types.h>
#include <unistd.h>
#include <netinet/in.h>
#include <netdb.h>
#include <stdio.h>
#include <sys/socket.h>
#include <errno.h>
/*
這是客戶端程序,輸入服務器的IP,連接服務器的8003端口,
就可以從服務器得到數據了。
*/
#define SERVER_PORT 8003
void recv_seq(int sockfd,int *data)
{
int temp;
read(sockfd,&temp,sizeof(int));
*data=ntohs(temp);
}
int main(int argc,char *argv[])
{
int sockfd;
struct sockaddr_in server_addr;
int ret;
int i;
int seq_data;
/*
這個結構是用于將輸入的IP地址轉換稱為機器名
*/
struct hostent *host;
if(argc!=2)
{
printf("Usage:%s servname\n",argv[0]);
exit(1);
}
/*
打開一個套接字,屬于連接型的,用于三次握手
*/
sockfd=socket(PF_INET,SOCK_STREAM,0);
if(sockfd<0)
{
fprintf(stderr,"Open socket error!\n");
exit(2);
}
/*
根據輸入的IP名,取得host結構
*/
if(!(host=gethostbyname(argv[1])))
{
fprintf(stderr,"gethostname error!");
exit(3);
}
printf("host ent :%s,%s\n",host->h_name,host->h_addr);
/*
*將server_addr清空
*/
bzero(&server_addr,sizeof(server_addr));
server_addr.sin_family=PF_INET;
server_addr.sin_port=htons(SERVER_PORT);
/*
字節復制,將第一個參數第三個參數長度到第二個參數
sr
dst
len
*/
bcopy(host->h_addr,&server_addr.sin_addr,host->h_length);
/*
* 連接這個服務器,進行三次握手
返回一個連接描述符
*/
ret=connect(sockfd,&server_addr,sizeof(server_addr));
if(ret<0)
{
fprintf(stderr,"connect error!\n");
exit(4);
}
/*
從這個描述符里面取數據。
*/
for(i=1;i<=100;i++)
{
recv_seq(sockfd,&seq_data);
printf("from the server:%d\n",seq_data);
}
close(sockfd);
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -