实现的功能是客户端输入一个字符串,服务端转成大写并送给客户端
在linux子系统下实现,ip为
server端
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <sys/types.h>
#include <ctype.h>
#define SERVER_PORT 8000
int main()
{
struct sockaddr_in serveraddr,clientaddr;
int sockfd,addrlen,confd,len,i=0;
char buf[128];
char arr[128];
// 1.socket
//使用ipv4和tcp
sockfd=socket(AF_INET,SOCK_STREAM,0);
//2.bind bind之前要进行一次清0操作
bzero(&serveraddr,sizeof(serveraddr));
//使用ipv4协议
serveraddr.sin_family=AF_INET;
//ip地址
//因为要从主机序转为网络序,所以要用htonl
serveraddr.sin_addr.s_addr=htonl(INADDR_ANY);
//端口
serveraddr.sin_port=htons(SERVER_PORT);
bind(sockfd,(struct sockaddr *)&serveraddr,sizeof(serveraddr));
//3.listen
while(1){
listen(sockfd,128);
//accept
addrlen=sizeof(clientaddr);
confd=accept(sockfd,(struct sockaddr *)&clientaddr,&addrlen);
//输出客户端dip地址和端口号
//inet_ntop 函数中p和n分别代表表达
//(presentation)和数值(numeric)。地址的表达格式通常是ASCII字符串,
//数值格式则是存放到套接字地址结构的二进制值。
//ntohs 将网络字节序转换为主机字节序
//inet_ntop和iinet_pton :
//点分十进制字符串(dotted-decimal notation)与网络字节序(network byte order)二进制数值互转
printf("client ip %s\t port %d\n",
inet_ntop(AF_INET,&clientaddr.sin_addr.s_addr,buf,sizeof(buf)),
ntohs(clientaddr.sin_port));
//5 处理客户端请求
len=read(confd,arr,sizeof(buf));
while(i<len){
buf[i]=toupper(arr[i]);
i++;
}
write(confd,buf,len);
close(confd);
}
close(sockfd);
return 0;
}
client端
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <sys/types.h>
#include <sys/stat.h>
#define SERVER_PORT 8000
int main(int argc,char *argv[])
{
if(argc<2){
printf("./client str \n ");
exit(1);
}
int confd,len;
char arr[128];
struct sockaddr_in serveraddr;
char buf[]="192.168.136.1";
//1.创建一个socket
confd=socket(AF_INET,SOCK_STREAM,0);
// 2. 初始化服务器地址
bzero(&serveraddr,sizeof(serveraddr));
serveraddr.sin_family=AF_INET;
//这里要用inet_pton 要将点分十进制转换为w二进制存储
inet_pton(AF_INET,buf,&serveraddr.sin_addr.s_addr);
serveraddr.sin_port=htons(SERVER_PORT);
//3.链接服务器
connect(confd,(struct sockaddr *)&serveraddr,sizeof(serveraddr));
//4 请求服务器处理数据;
write(confd,argv[1],strlen(argv[1]));
len=read(confd,arr,sizeof(arr));
write(STDOUT_FILENO,arr,len);
//5.关闭socket
close(confd);
}
现象: