service.c
#include <stdio.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <netinet/ip.h>
#include <arpa/inet.h>
#include <unistd.h>
int main(int argc, char const *argv[])
{
//socket:创建一个用于链接的套接字
int sockfd = socket(AF_INET, SOCK_STREAM, 0);
if (sockfd < 0)
{
perror("secoket err.");
return -1;
}
printf("sockfd:%d\n", sockfd);
//bind:绑定自己的ip地址和端口
struct sockaddr_in saddr;
saddr.sin_family = AF_INET;
saddr.sin_port = htons(8888);
saddr.sin_addr.s_addr = inet_addr("192.168.8.118");
if (bind(sockfd, (struct sockaddr *)&saddr, sizeof(saddr)) < 0)
{
perror("bind err.");
return -1;
}
printf("bind ok\n");
//listen:监听,将主动套接字转为被动套接字
if (listen(sockfd, 5) < 0)
{
perror("listen err.");
return -1;
}
printf("listen ok.\n");
//accept:阻塞等待客户端链接,链接成功返回一个用于通信套接字
int acceptfd;
acceptfd = accept(sockfd, NULL, NULL);
if (accept < 0)
{
perror("accept err.");
return -1;
}
printf("acceptfd:%d\n", acceptfd);
ssize_t ret;
char buf[128];
while (1)
{
ret = recv(acceptfd, buf, sizeof(buf), 0);
if (ret < 0)
{
perror("recv err.");
return -1;
}
else if (ret == 0)
{
printf("client exit\n");
break;
}
else
{
printf("buf:%s\n", buf);
}
}
close(sockfd);
close(acceptfd);
return 0;
}
client.c
#include <stdio.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <netinet/ip.h>
#include <arpa/inet.h>
#include <unistd.h>
int main(int argc, char const *argv[])
{
//socket:创建一个套接字
int sockfd = socket(AF_INET, SOCK_STREAM, 0);
if (sockfd < 0)
{
perror("secoket err.");
return -1;
}
printf("sockfd:%d\n", sockfd);
//结构体填自己的ip地址和端口
struct sockaddr_in saddr;
saddr.sin_family = AF_INET;
saddr.sin_port = htons(8888);
saddr.sin_addr.s_addr = inet_addr("192.168.8.118");
//connect:阻塞等待链接服务器
if (connect(sockfd, (struct sockaddr *)&saddr, sizeof(saddr)) < 0)
{
perror("connect err.");
return -1;
}
printf("connect ok.\n");
//recv/send:接收/发送消息
ssize_t ret;
char buf[128];
while (1)
{
scanf("%s",buf);
ret = send(sockfd, buf, sizeof(buf), 0);
if (ret < 0)
{
perror("send err.");
return -1;
}
}
close(sockfd);
return 0;
}