linux下这个应该是最经典的用socket实现的案例了吧,也是unp中使用的一个案例
写一下练练手,直接上代码
server.cpp
#include<bits/stdc++.h>
#include<unistd.h>
#include<sys/socket.h>
#include<sys/types.h>
#include<arpa/inet.h>
#include<netinet/in.h> //这个头文件要注意
using namespace std;
#define ERROR_EXIT(msg) do{\
perror(msg);\
exit(EXIT_FAILURE);\
}while(0)
#define PORT 8080
#define BACKLOG 5
#define BSIZE 1024
int main(){
int sockfd;
sockfd=socket(AF_INET,SOCK_STREAM,0);
if(sockfd==0)
ERROR_EXIT("socket");
struct sockaddr_in serveraddr;
memset(&serveraddr, 0 ,sizeof(serveraddr));
serveraddr.sin_port = htons(PORT);
serveraddr.sin_addr.s_addr = INADDR_ANY;
serveraddr.sin_family = AF_INET;
if(::bind(sockfd, (struct sockaddr *)&serveraddr, sizeof(serveraddr))<0)
ERROR_EXIT("bind");
if(listen(sockfd, BACKLOG)<0)
ERROR_EXIT("listen");
socklen_t len;
sockaddr_in clientaddr;
len=sizeof(clientaddr);
int conn=accept(sockfd, (struct sockaddr *)&clientaddr, &len);
if(conn<0)
ERROR_EXIT("accept");
char recvbuf[BSIZE];
while(1){
int nread=read(conn, recvbuf, sizeof(recvbuf));
if(nread==0)
break;
else
printf("Receive:%s\n",recvbuf);
write(conn, recvbuf, sizeof(recvbuf));
}
close(conn);
close(sockfd);
return 0;
}
client.cpp
#include<bits/stdc++.h>
#include<unistd.h>
#include<sys/socket.h>
#include<sys/types.h>
#include<arpa/inet.h>
#include<netinet/in.h>
using namespace std;
#define ERROR_EXIT(msg) do{\
perror(msg);\
exit(EXIT_FAILURE);\
}while(0)
#define PORT 8080
#define BSIZE 1024
int main(){
int clientfd=socket(AF_INET, SOCK_STREAM, 0);
if(clientfd<0)
ERROR_EXIT("socket");
struct sockaddr_in serveraddr;
memset(&serveraddr, 0, sizeof(serveraddr));
serveraddr.sin_port = htons(PORT);
serveraddr.sin_addr.s_addr = inet_addr("127.0.0.1");
serveraddr.sin_family = AF_INET;
if(connect(clientfd, (struct sockaddr *)&serveraddr, sizeof(serveraddr)))
ERROR_EXIT("connect");
char recvbuf[BSIZE];
char sendbuf[BSIZE];
while(1){
scanf("%s",sendbuf);
write(clientfd, sendbuf, sizeof(sendbuf));
read(clientfd, recvbuf, sizeof(recvbuf));
printf("%s\n",recvbuf);
}
close(clientfd);
return 0;
}
哪里不懂直接man