?? test12_3.txt
字號:
/*客戶端代碼*/
#include <sys/types.h>
#include <sys/socket.h>
#include <netdb.h>
#include <unistd.h>
#include <netinet/in.h>
#include <stdio.h>
#include <string.h>
//#include <unp.h>
#define MAXSIZE 80
#define SA struct sockaddr
void str_cli(FILE *,int);
int main(int argc,char **argv)
{
int sockfd,ret,len;
struct sockaddr_in ser_addr;
char *myname;
struct servent *server;
struct hostent *sh;
struct in_addr **addrs;
if(argc!=2)
{
printf("parameters not match.");
exit(0);
}
/*判斷參數(shù)是否匹配 */
if((server=getservbyname(argv[1],NULL))==NULL)
{
printf("error when getservbyname");
exit(0);
}
/*/獲得服務(wù)器信息*/
if((sh=gethostbyname(server->s_name))==NULL)
{
printf("error when gethostbyname");
exit(0);
}
/* 根據(jù)服務(wù)器名獲得詳細信息*/
addrs=(struct in_addr **)sh->h_addr_list;
for(;*addrs!=NULL;addrs++)
{
sockfd=socket(AF_INET,SOCK_STREAM,0);
if(sockfd<0)
{
printf("error in socket");
exit(1);
}
/* 創(chuàng)建套接口*/
ser_addr.sin_family=AF_INET;
ser_addr.sin_port=server->s_port;
memcpy(&(ser_addr.sin_addr),*addrs,sizeof(struct in_addr));
bzero(&(ser_addr.sin_zero),8);
ret=connect(sockfd,(SA *)&ser_addr,sizeof(struct sockaddr));
if(ret==0)
break;
/* 連接成功則跳出循環(huán)*/
else
{
printf("error connecting");
close(sockfd);
}
}
/*嘗試與服務(wù)器的各個地址連接,知道連接上其中一個為止 */
if(*addrs==NULL)
{
printf("can’t get connected with server");
exit(0);
}
/*連接不成功則報錯并退出 */
str_cli(stdin,sockfd);
/*數(shù)據(jù)傳輸操作 */
close(sockfd);
exit(0);
}
void str_cli(FILE *fp,int sockfd)
{
char sends[MAXSIZE],recvs[MAXSIZE];
int n=0;
while(fgets(sends,MAXSIZE,fp)!=NULL)
{
send(sockfd,sends,strlen(sends),0);
if((n=recv(sockfd,recvs,MAXSIZE,0))==0)
{
printf("error receiving data");
exit(1);
}
recvs[n]=0;
fputs(recvs,stdout);
}
}
/*服務(wù)器端代碼*/
#include <string.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <unistd.h>
//#include <unp.h>
#define MAXSIZE 80
#define MYPORT 3490
#define BACKLOG 10
#define BUFSIZE 100
#define true 1
void str_ser(int);
main ( )
{
int sockfd,new_fd,numbytes,ret;
struct sockaddr_in my_addr;
struct sockaddr_in their_addr;
int sin_size,con_fd,pid;
char *buf;
sockfd=socket(AF_INET,SOCK_STREAM,0);
if(sockfd<0)
{
printf("error in socket");
exit(1);
}
/*創(chuàng)建監(jiān)聽套接口 */
my_addr.sin_family=AF_INET;
my_addr.sin_port=htons(MYPORT);
my_addr.sin_addr.s_addr=htonl(INADDR_ANY);
bzero(&(my_addr.sin_zero),8);
ret=bind(sockfd,(struct sockaddr *)&my_addr,sizeof(struct sockaddr));
if(ret<0)
{
printf("error in binding");
exit(1);
}
/*綁定監(jiān)聽套接口 */
ret=listen (sockfd,BACKLOG);
if(ret<0)
{
printf("error in listening");
exit(1);
}
/* 監(jiān)聽連接請求*/
while(true)
{
sin_size=sizeof(struct sockaddr_in);
con_fd=accept(sockfd,(SA *)&their_addr,&sin_size);
if(con_fd<0)
{
printf("error in accept");
exit(1);
}
/*創(chuàng)建新的連接 */
if((pid=fork())==0)
{
close(sockfd);
str_ser(con_fd);
/*接收并處理數(shù)據(jù) */
close(con_fd);
exit(0);
}
/*子進程代碼 */
else
close(con_fd);
/*父進程代碼 */
}
close(sockfd);
exit(0);
}
void str_ser(int sockfd)
{
char recvs[MAXSIZE];
int n=0;
while(true)
{
if((n=recv(sockfd,recvs,MAXSIZE,0))==0)
return;
/*對方關(guān)連接,返回主程序 */
send(sockfd,recvs,n,0);
}
}
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -