server.cpp
#include <stddef.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <stdint.h>
#include <unistd.h>
#include <errno.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <netinet/tcp.h>
#include <netdb.h>
#define ip "127.0.0.1"
#define port 8888
int main(int argc, char* argv[])
{
int afd, sfd;
struct sockaddr_in servaddr;
//创建socket文件描述符
sfd = socket(AF_INET, SOCK_STREAM, 0);
if(sfd == -1)
{
perror("sfd == -1");
exit(1);
}
//防止端口复用
int reuse = 1 ;
setsockopt(sfd, SOL_SOCKET, SO_REUSEADDR, (void*)&reuse, sizeof(reuse));
//初始化socket
memset(&servaddr, 0, sizeof(servaddr));
servaddr.sin_family = AF_INET;
servaddr.sin_port = htons(port) ;
servaddr.sin_addr.s_addr = inet_addr(ip);
//绑定套接字
if(bind(sfd, (struct sockaddr*)&servaddr, sizeof(servaddr)) == -1)
{
perror("bind error");
exit(1);
}
//监听套接字
if(listen(sfd, 5) == -1)
{
perror("listen error");
exit(1);
}
//连接确认
if((afd = accept(sfd, NULL, NULL)) == -1)
{
perror("accept error");
exit(1);
}
char buf[1024];
while(memset(buf, 0, 1024), read(afd, buf, 1024))
{
printf("%s\n", buf);
if(write(afd, buf, strlen(buf))== -1)
{
perror("write error");
exit(1);
}
}
//关闭套接字
close(afd);
return 0;
}
client.cpp
#include <stddef.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <stdint.h>
#include <unistd.h>
#include <errno.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <netinet/tcp.h>
#include <netdb.h>
#define ip "127.0.0.1"
#define port 8888
int main(int argc, char* argv[])
{
struct sockaddr_in servaddr;
//创建socket文件描述符
int sfd = socket(AF_INET, SOCK_STREAM, 0);
if(sfd == -1)
{
perror("sfd == -1");
exit(1);
}
//防止端口复用
int reuse = 1 ;
setsockopt(sfd, SOL_SOCKET, SO_REUSEADDR, (void*)&reuse, sizeof(reuse));
//设置将要与服务器连接的套接字
memset(&servaddr, 0, sizeof(servaddr));
servaddr.sin_family = AF_INET;
servaddr.sin_port = htons(port) ;
servaddr.sin_addr.s_addr = inet_addr(ip);
//与服务器连接
if(connect(sfd, (sockaddr*)&servaddr, sizeof(servaddr))== -1)
{
perror("connect error");
exit(1);
}
//通信
char buf[1024];
while(memset(buf, 0, 1024), scanf("%s", buf) != EOF)
{
printf("%s\n", buf);
if(write(sfd, buf, strlen(buf)) == -1)
{
perror("write error");
exit(1);
}
}
close(sfd);
return 0;
}