客户端与服务器可以说是构建一个网络的最基础的东西了,现在我自己创建一个客户端,一个服务器,使得客户端
传小写字母给服务器,服务器接收后转换成大写字母回传给客户端,最好让客户端处循环输入一个字母,返回一个大写
字母。下面则是自己写的程序:
(1)搭建服务器并写好算法:
#include <stdio.h>
#include <strings.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#define SERV_PORT 9000
int main()
{
int listen_sockfd ;
int ret ;
struct sockaddr_in server_addr ;//服务器地址结构
struct sockaddr_in client_addr ;//客户端的地址
//创建监听套接字
listen_sockfd = socket(AF_INET ,SOCK_STREAM, 0) ;
if(listen_sockfd == -1)
{
perror("sorry create socket error") ;
return -1 ;
}
//初始化服务器地址结构
bzero(&server_addr ,sizeof(server_addr)) ;//将地址结构变量清零
server_addr.sin_family = AF_INET ;//选择ipv4地址
server_addr.sin_addr.s_addr = htonl(INADDR_ANY) ;//监听本地任意ip地址
server_addr.sin_port = htons(SERV_PORT) ;//将本地端口号转化为网络端口号
//绑定本地地址和端口号
ret = bind(listen_sockfd ,(struct sockaddr *)&server_addr ,sizeof(server_addr)) ;
if(ret == -1)
{
perror("listen error") ;
return -1 ;
}
// 监听套接字
ret = listen(listen_sockfd, 20);
if (ret == -1)
{
perror("listen error");
return -1;
}
int clientfd ;
socklen_t client_len = sizeof(client_addr) ;
printf("等待客户端的接入 。。。。。。\n");
clientfd = accept(listen_sockfd,(struct sockaddr *)&client_addr ,&client_len) ;
if(clientfd == -1)
{
perror("接收失败") ;
return -1 ;
}
while(1)
{
char buf[512] = {0} ;
//接收客户端的消息
if(recv(clientfd,buf,sizeof(buf),0) == -1)//从客户端接收到的消息存于buf中
{
perror("接收消息失败");
return -1 ;
}
puts(buf) ;
char a[512] = {0} ;
a[0] = buf[0] - ('a' - 'A') ;
//从a中取向客户端发送数据
if(send(clientfd,a,sizeof(a),0) == -1)
{
perror("发送数据失败");
return -1 ;
}
printf("\n") ;
}
return 0 ;
}
#include <stdio.h>
#include <strings.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#define SERV_PORT 9000
int main(int argc ,char*argv[])
{
int server_sockfd ;
int ret ;
struct sockaddr_in client_addr ;
if(argc != 2)
{
printf("您的输入有误\n") ;
return -1 ;
}
//创建监听套接字
server_sockfd = socket(AF_INET, SOCK_STREAM, 0) ;
if(server_sockfd == -1)
{
perror("sorry create socket error") ;
return -1 ;
}
// 初始化服务器地址结构
bzero(&client_addr, sizeof(client_addr)); // 将地址结构变量清零
client_addr.sin_family = AF_INET; // 选择IPV4地址
inet_aton(argv[1], &client_addr.sin_addr); // 填写服务器地址
client_addr.sin_port = htons(SERV_PORT); // 填写服务器端口
//连接服务器
ret = connect(server_sockfd,(struct sockaddr *)&client_addr,sizeof(client_addr)) ;
if(ret == -1 )
{
perror("连接失败");
return -1 ;
}
while(1)
{
char buf[512] = {0} ;
printf("请输入信息(一个小写字母):");
scanf("%s",buf) ;
printf("\n") ;
if(send(server_sockfd,buf,sizeof(buf),0) == -1)
{
printf("对不起 消息发送失败\n") ;
return -1 ;
}
char b[512] = {0} ;
if(recv(server_sockfd,b,sizeof(b),0) == -1)
{
printf("对不起 接受消息失败\n") ;
return -1 ;
}
printf("经转换后的信息为:") ;
puts(b) ;
printf("\n") ;
}
return 0 ;
}
将上面两个程序分别在终端运行 便可以进行大小写的转换
878

被折叠的 条评论
为什么被折叠?



