linux终端基于Udp协议实现聊天通讯窗口

目录

要求

示例流程图

示例代码片段

头文件

编译文件

client端

主函数

容错判断:ip地址与端口

创建流式套接字

填充服务器端ip与端口

连接服务器

子进程循环发送消息与离开发送

server端

主函数

容错判断:端口

创建流式套接字

开启服务器端口与选用当前ip

绑定固定ip与端口

开启监听,主动套接字转被动套接字

阻塞等待连接,子进程接收消息与发送消息


要求

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 
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值