目录
要求
1、双人通讯,服务器显示连接上并在正进行通讯客户端的ip地址和端口号;
2、客户端可以开多个,但只允许最后一个连接上的客户端进行通讯;
3、客户端离开后服务器能够看到有客户端离开的提示,服务器终止后所有客户端也随之强制离开;
4、父子进程循环发送与接收;
示例流程图
示例代码片段
头文件
#ifndef _HEAD_H_
#define _HEAD_H_
#include <stdio.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <unistd.h>
#include <string.h>
#include <netinet/in.h>
#include <netinet/ip.h>
#include <arpa/inet.h>
#include <stdlib.h>
#include <sys/wait.h>
#endif
编译文件
all:
gcc server.c -o server
gcc client.c -o client
.PONLY:clean
clean:
rm server clinet -f
client端
主函数
容错判断:ip地址与端口
if (argc != 3)
{
printf("please input %s <ip> <port>\n", argv[0]);
return -1;
}
创建流式套接字
int sockfd = socket(AF_INET, SOCK_STREAM, 0);
if (sockfd < 0)
{
perror("socket err.");
return -1;
}
填充服务器端ip与端口
//(ipv4)
struct sockaddr_in saddr;
saddr.sin_family = AF_INET;
saddr.sin_port = htons(atoi(argv[2]));
//数字字符串转数值
saddr.sin_addr.s_addr = inet_addr(argv[1]);
连接服务器
//连接
if