服务器和客户端的套接字通信
大家好,我是小学五年级在读的蒟蒻,专注于后端,一起见证蒟蒻的成长,您的评论与赞与关注是我的最大动力,如有错误还请不吝赐教,万分感谢。一起支持原创吧!纯手打有笔误还望谅解。
-
实战练习
- 编写两个程序:一个服务器,一个客户端,让用户能够在客户端不断输入信息并发送到服务器终端上显示.
-
服务器程序编程
-
新建serve.cpp文件,在其中写服务器的代码: #include<sys/types.h>
#include<sys/socket.h>
#include<stdio.h>
#include<netinet/in.h>
#include<arpa/inet.h>
#include<unistd.h>
#include<string.h>
#include<stdlib.h>
#include<fcntl.h>
#include<sys/shm.h>
#include<iostream>
using namespace std;
int main()
{
int server_sockfd = socket(AF_INET,SOCK_STREAM,0);
struct sockaddr_in server_sockaddr;
server_sockaddr.sin_family = AF_INET;
server_sockaddr.sin_port=htons(8023);
server_sockaddr.sin_addr.s_addr=inet_addr("127.0.0.1");
if(bind(server_sockfd,(struct sockaddr *)&server_sockaddr,sizeof(server_sockaddr)))
{
perror("bind");
exit(1);
}
if(listen(server_sockfd,20)==-1)
{
perror("listen");
exit(1);
}
struct sockaddr_in client_addr;
socklen_t length=sizeof(client_addr);
int conn=accept(server_sockfd,(struct sockaddr*)&client_addr,&length);
if(conn<0)
{
perror("connect");
exit(1);
}
char buffer[1000];
while(1)
{
memset(buffer,0,sizeof(buffer));
int len=recv(conn,buffer,sizeof(buffer),0);
if(strcmp(buffer,"exit")==0||len<=0)
break;
cout<<"收到客户端信息:"<<buffer<<endl;
}
close(conn);
close(server_sockfd);
return 0;
}
-
client.cpp #include<sys/types.h>
#include<sys/socket.h>
#include<stdio.h>
#include<netinet/in.h>
#include<arpa/inet.h>
#include<unistd.h>
#include<string.h>
#include<stdlib.h>
#include<fcntl.h>
#include<sys/shm.h>
#include<iostream>
using namespace std;
int main()
{
int sock_cli=socket(AF_INET,SOCK_STREAM,0);
struct sockaddr_in servaddr;
memset(&servaddr,0,sizeof(servaddr));
servaddr.sin_family=AF_INET;
servaddr.sin_port=htons(8023);
servaddr.sin_addr.s_addr=inet_addr("127.0.0.1");
if(connect(sock_cli,(struct sockaddr *)&servaddr,sizeof(servaddr)))
{
perror("connect");
exit(1);
}
cout<<"连接服务器成功!"<<endl;
char sendbuf[100];
char recvbuf[100];
while(1)
{
memset(sendbuf,0,sizeof(sendbuf));
cin>>sendbuf;
send(sock_cli,sendbuf,strlen(sendbuf),0);
if(strcmp(sendbuf,"exit")==0)
{
break;
}
}
close(sock_cli);
return 0;
}
|