这个实例的功能:客户端从终端获取一个字符串,将其发送给服务端。服务端接收到字符串之后将字符串转换为大写字母然后发送给客户端,并显示到终端;
#include<stdio.h>
#include<string.h>
#include<netinet/in.h>
#include<unistd.h>
#include<arpa/inet.h>
#include<ctype.h>
#define MAXLINE 80
#define SERV_PORT 6666
int main()
{
int n,i;
char str[INET_ADDRSTRLEN];
socklen_t cliaddr_len;
int servfd;
char buf[MAXLINE];
struct sockaddr_in servaddr,cliaddr;
servfd=socket(AF_INET,SOCK_DGRAM,0);
//初始化服务器端口地址
bzero(&servaddr,sizeof(servaddr));//地址结构体清零
servaddr.sin_family=AF_INET;//指定协议族
servaddr.sin_addr.s_addr=htonl(INADDR_ANY);
servaddr.sin_port=htons(SERV_PORT);
bind(servfd,(struct sockaddr *)&servaddr,sizeof(servaddr));
char strbuf[]="waitting for connections........";
write(STDOUT_FILENO,strbuf,strlen(strbuf));
while(1)
{
cliaddr_len=sizeof(cliaddr);
n=recvfrom(servfd,buf,MAXLINE,0,(struct sockaddr *)&cliaddr,&cliaddr_len);
if(n==-1)
perror("receive error\n");
printf("receive from %s at PORT %d:",inet_ntop(AF_INET,&cliaddr.sin_addr,str,sizeof(str)),ntohs(cliaddr.sin_port));
for(i=0;i<n;i++)
{
buf[i]=toupper(buf[i]);
}
n=sendto(servfd,buf,n,0,(struct sockaddr *)&cliaddr,sizeof(cliaddr));
if(n==-1)
perror("sendto error\n");
}
close(servfd);
return 0;
}
#include<stdio.h>
#include<string.h>
#include<unistd.h>
#include<netinet/in.h>
#include<arpa/inet.h>
#define MAXLINE 80
#define SERV_PORT 6666
int main(int argc,char * argv[])
{
int n;
int sockfd;
char buf[MAXLINE];
struct sockaddr_in servaddr;
sockfd=socket(AF_INET,SOCK_DGRAM,0);
bzero(&servaddr,sizeof(servaddr));
servaddr.sin_family=AF_INET;
inet_pton(AF_INET,"127.0.0.1",&servaddr.sin_addr);
servaddr.sin_port=htons(SERV_PORT);
while(fgets(buf,MAXLINE,stdin)!=NULL)
{
n=sendto(sockfd,buf,strlen(buf),0,(struct sockaddr *)&servaddr,sizeof(servaddr));
if(n==-1)
perror("sendto error");
n=recvfrom(sockfd,buf,MAXLINE,0,NULL,0);
if(n==-1)
perror("receive error");
write(STDOUT_FILENO,buf,n);
}
close(sockfd);
return 0;
}