Unix实现套接字通信

accept()的返回值针对不同的客户端不应该不一样吗?为什么这里这里不同用户打印的connect值相同,而且都为4啊?

struct member{
int number;    //记录用户数量
char conn[5];    //记录每个用户对应的连接号
char user[5][20];   //和number对应,记录第i个用户的姓名
};
//用shm函数开辟了一个结构体member大小的共享内存
//p是指向这个共享结构体的指针

服务端部分代码

img


运行结果如下:

img

不知道你这个问题是否已经解决, 如果还没有解决的话:
  • 这篇博客: 快递智能终端系统中的 accept 接受请求链接 部分也许能够解决你的问题, 你可以仔细阅读以下内容或者直接跳转源博客中阅读:

    conn, addr = server_receive.accept()

    while True:
    # 接受数据
    data = conn.recv(1024)
    msg = int(data)

    if not data:
        break
    else:
        # 输出数据
        print(str(data, encoding="utf-8"))
    while int(msg) != 0:
        if msg == 1:
            ewmsc()
            break
        elif msg == 2:
            xxlrscewm()
            break
        elif msg == 3:
            dysxtsmewm()
            break
        elif msg == 4:
            readexcel()
            break
        elif msg == 5:
            Search()
            break
        elif msg == 6:
            Modify_excel()
            break
        else:
            print("输入错误!")
            break
        Menu()
    
    print("已保存")
    huifu  = '已完成相应操作,请继续'
    if len(data) == 0:
        continue
    conn.sendall(bytes(huifu, encoding="utf-8"))
    

如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^

已解决,因为子进程会复制父进程资源,包括内存空间,所以子进程会有自己的存放“试图连接服务器的客户端”的序列,又因为所有客户端进入序列都是四号位置(原因不明),所以所有connect值都为4。