客户端可以输入数据
#include<iostream>
using namespace std;
#include<unistd.h>
#include<stdlib.h>
#include<stdio.h>
#include<string.h>
#include<arpa/inet.h>
int main(){
int sfd=socket(AF_INET,SOCK_STREAM,0);
sockaddr_in saddr;
saddr.sin_family=AF_INET;
saddr.sin_port=htons(7000);
inet_pton(AF_INET,"192.168.232.132",&saddr.sin_addr.s_addr);
int ret=connect(sfd,(sockaddr*)&saddr,sizeof(saddr));
if(ret==-1){
perror("connect");
exit(0);
}
char str[1024];
while(1){
cin>>str;
write(sfd,str,sizeof(str));
}
}
服务器端读取数据
#include<iostream>
using namespace std;
#include<unistd.h>
#include<stdio.h>
#include<stdlib.h>
#include<arpa/inet.h>
int main(){
int sfd=socket(AF_INET,SOCK_STREAM,0);
sockaddr_in saddr;
saddr.sin_family=AF_INET;
saddr.sin_port=htons(7000);
inet_pton(AF_INET,"192.168.232.132",&saddr.sin_addr.s_addr);
bind(sfd,(sockaddr*)(&saddr),sizeof(saddr));
listen(sfd,5);
sockaddr_in aaddr;
socklen_t len=sizeof(aaddr);
int cfd=accept(sfd,(sockaddr*)&aaddr,&len);
if(cfd == -1) {
perror("accept");
exit(-1);
}
char clientIP[16];
inet_ntop(AF_INET, &aaddr.sin_addr.s_addr,clientIP, sizeof(clientIP));
cout<<"连接成功,客户端端口号为"<<ntohs(aaddr.sin_port)<<"ip为:"<<
clientIP<<endl;
char str[1024];
while(1){
read(cfd,str,sizeof(str));
cout<<str<<endl;
}
}
使用select改进服务器端实现多客户端进行通信
#include<iostream>
using namespace std;
#include<unistd.h>
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<arpa/inet.h>
#include <sys/select.h>
int main(){
int sfd=socket(AF_INET,SOCK_STREAM,0);
sockaddr_in saddr;
saddr.sin_family=AF_INET;
saddr.sin_port=htons(6500);
saddr.sin_addr.s_addr=INADDR_ANY;
bind(sfd,(sockaddr*)(&saddr),sizeof(saddr));
listen(sfd,5);
fd_set rdset,tempset;
int maxfd=sfd;
FD_ZERO(&rdset);
FD_SET(sfd,&rdset);
while(1){
tempset=rdset;
int res=select(maxfd+1,&tempset,NULL,NULL,NULL);
if(res>0&&FD_ISSET(sfd, &tempset)){
sockaddr_in aaddr;
socklen_t len=sizeof(aaddr);
int cfd=accept(sfd,(sockaddr*)&aaddr,&len);
char clientIP[16];
inet_ntop(AF_INET, &aaddr.sin_addr.s_addr,clientIP, sizeof(clientIP));
cout<<"连接成功,客户端端口号为"<<ntohs(aaddr.sin_port)<<"ip为:"<<
clientIP<<endl;
if(cfd>maxfd)
maxfd=cfd;
FD_SET(cfd,&rdset);
if(cfd == -1) {
perror("accept");
exit(-1);
}
}
for(int i=sfd+1;i<=maxfd;i++){
if(FD_ISSET(i, &tempset)){
char str[1024];
int len=read(i,str,sizeof(str));
if(len==0){
close(i);
FD_CLR(i,&rdset);
}
cout<<str<<endl;
}
}
}
}