热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

LINUX聊天室50问

LINUX聊天室50问1.问题:怎么实现多个终端?监听?2.一个聊天室程序,到底会分解成哪一些步骤呢?3.
====================================

       LINUX聊天室50问

====================================


1.问题:怎么实现多个终端?监听?

2.一个聊天室程序,到底会分解成哪一些步骤呢?

3.开启一个 Socket,绑定到另一个端口,并且一直监听此端口。

4.服务器是得有很多个SOCKET,还是一个socket,而有很多个port?
答:是有很多个socket,并用数组管理

5.服务器(SOCKET数组):基本上是多线程:一个线程监听,Accept之后创建一个线程处理请求

————————————————————————————————————
思路:
1:服务器端有个Listener线程,用来监听。
2:服务器端再来个server   socket线程,用来和客户端连接。
3:当监听到客户连接时,创建server   socket线程,独立和客户端连接。
4:服务器端要有一个结构来保存客户端信息。可以自己写一个类来封装。如用户ip等。
——————————————————————————————————————

6.当监听到客户连接时,创建server   socket线程,独立和客户端连接。
这么说,socket是可以动态创建的。

7.监听listening和connect之间,是一个配对的关系。

8.那么请问bind呢?socket和port与bind?
答:估计是将创建的socket与本地IP绑定起来。

9.想想看,QQ有几亿个用户,他是怎么管理的?如何回快QQ的登陆呢?
我想问一下,终端侦听的客户端有限制么?是不是客户端越多,开的线程就越多,程序处理速度就越慢

呢?我要做的至少要连接500个客户端,进行数据的交互,会不会有问题呢。再顶下自己~~

10.ServerSocket.vb
负责监听是否有客户端连接,开线程接受客户端Socket

————————————————————————————————————
        Public   Svr   As   IPEndPoint                   '服务器地址簇
        Public   SvrListenSocket   As   Socket   '服务器侦听socket
        Public   SvrListener   As   Socket           '表示异步操作的状态
        Public   SvrListenThread   As   Thread   '服务器侦听线程
        Public   Done   As   New   ManualResetEvent(True)   '通知一个或多个正在等待的线程已

发生事件
Public   alsock   As   New   ArrayList       '放置socket的队列
——————————————————————————————————————

11.  '侦听50个客户端   并启动线程
 '开始一个异步操作来接受一个传入的连接尝试
                                SvrListenSocket.BeginAccept(New   AsyncCallback(AddressOf  

AcceptCallback),   SvrListenSocket)

12.当发现一个连接后,建立一个线程,然后处理,当另外一个来后,重新创建!
public   sealed   class   Sockets
{
      private   Sockets()
      {
              //在这里可以建立连接
      }

      public   static   Sockets   GetInstance(IPEndPoint   point)
      {
              //在这里可以建立线程并连接
      }
}


13.我的那个例程是用进程还是线程实现通信的?不知啊。是socket。但是?

14.建立多个线程就ok了 为每一个连接 创建一个线程去处理
      while (true)
            {
                // 得到包含客户端信息的套接字
                Socket client = server.Accept();

                //创建消息服务线程对象
                ClientThread newclient = new ClientThread(client);

                //把ClientThread 类的ClientService方法委托给线程
                Thread newthread = new Thread(new ThreadStart(newclient.ClientService));

                // 启动消息服务线程
                newthread.Start();
            }

15.客户端在通信时,需要知道服务器的IP地址。属于主动的一方
16.客户端在向服务器(系统)请求一个临时端口,用完后释放端口,断开链接。需要时再重新连上。
那请问,QQ打开一个窗口时,是一直连接着吗?(应该是的。如果没有打开窗口,那就没连接。只是跟

服务器连接着)

17.服务器端,在通信时一般属于被动方,不知客户端的IP和端口信息。

18.用connect将客户端套接字与服务器特定地址进行绑定连接

19.将socket连接到远程主机(client. c)或者本地IP(server.c)

20.按要求通过socket接收和发送数据

21.端口地址是以进程为单位分配的。发送和接收必须使用同一端口。

22.为什么在一个服务器对多个客户端情况下,进程会阻塞,而线程就不阻塞了呢?
每个客户端对应两个线程(收发各一个);而客户端本身呢,只需要有两个。

23.发送请求过程
1)利用gethostbyname()获取主机信息
2)初始化socket端口
3)利用connect函数将自己的ip地址等信息发送给主机,等待主机调用accept函数来接受请求。

24.主机接收请求,进行数据通信
1)主机用accept接收请求
2)创建子线程,显示欢迎信息
3)接收返回信息,显示连接成功
4)关闭客户端socket
5)关闭服务端socket,结束子线程。

24.define BACKLOG 10  这个有何用?

25.那我Lisent只能监听一个啊?那么多个客户端,怎么办呢?怎么实现并发监听呢?

 

未完待续。。。


推荐阅读
  • Android异步处理一:使用Thread+Handler实现非UI线程更新UI界面Android异步处理二:使用AsyncTask异步更新UI界面Android异步处理三:Handler+Loope ... [详细]
  • 本文通过基准测试(Benchmark)对.NET Core环境下Thrift和HTTP客户端的微服务通信性能进行对比分析。基准测试是一种评估系统或组件性能的方法,通过运行一系列标准化的测试来衡量其表现。 ... [详细]
  • Linux 防火墙与端口管理必备命令
    在使用 Linux 系统进行服务部署和问题排查时,防火墙和端口管理是不可或缺的操作。本文将详细介绍如何查看防火墙状态、端口占用情况,以及如何开放和关闭端口,帮助初学者更好地掌握这些技能。 ... [详细]
  • 面试题总结_2019年全网最热门的123个Java并发面试题总结
    面试题总结_2019年全网最热门的123个Java并发面试题总结 ... [详细]
  • 包含phppdoerrorcode的词条 ... [详细]
  • 数据结构第三章,栈、队列、数组,期末不挂科指南,第3篇
    数据结构第三章,栈、队列、数组,期末不挂科指南,第3篇,Go语言社区,Golang程序员人脉社 ... [详细]
  • 【妙】bug称它为数组越界的妙用
    1、聊一聊首先跟大家推荐一首非常温柔的歌曲,跑步的常听。本文主要把自己对C语言中柔性数组、零数组等等的理解分享给大家,并聊聊如何构建一种统一化的学习思想 ... [详细]
  • 本文详细介绍了Java反射机制的基本概念、获取Class对象的方法、反射的主要功能及其在实际开发中的应用。通过具体示例,帮助读者更好地理解和使用Java反射。 ... [详细]
  • 本文详细介绍了在 CentOS 7 系统中配置 fstab 文件以实现开机自动挂载 NFS 共享目录的方法,并解决了常见的配置失败问题。 ... [详细]
  • Spring Boot 中配置全局文件上传路径并实现文件上传功能
    本文介绍如何在 Spring Boot 项目中配置全局文件上传路径,并通过读取配置项实现文件上传功能。通过这种方式,可以更好地管理和维护文件路径。 ... [详细]
  • 原文网址:https:www.cnblogs.comysoceanp7476379.html目录1、AOP什么?2、需求3、解决办法1:使用静态代理4 ... [详细]
  • Java高并发与多线程(二):线程的实现方式详解
    本文将深入探讨Java中线程的三种主要实现方式,包括继承Thread类、实现Runnable接口和实现Callable接口,并分析它们之间的异同及其应用场景。 ... [详细]
  • 本文详细介绍了 PHP 中对象的生命周期、内存管理和魔术方法的使用,包括对象的自动销毁、析构函数的作用以及各种魔术方法的具体应用场景。 ... [详细]
  • Java Socket 关键参数详解与优化建议
    Java Socket 的 API 虽然被广泛使用,但其关键参数的用途却鲜为人知。本文详细解析了 Java Socket 中的重要参数,如 backlog 参数,它用于控制服务器等待连接请求的队列长度。此外,还探讨了其他参数如 SO_TIMEOUT、SO_REUSEADDR 等的配置方法及其对性能的影响,并提供了优化建议,帮助开发者提升网络通信的稳定性和效率。 ... [详细]
  • 本文介绍了Python高级网络编程及TCP/IP协议簇的OSI七层模型。首先简单介绍了七层模型的各层及其封装解封装过程。然后讨论了程序开发中涉及到的网络通信内容,主要包括TCP协议、UDP协议和IPV4协议。最后还介绍了socket编程、聊天socket实现、远程执行命令、上传文件、socketserver及其源码分析等相关内容。 ... [详细]
author-avatar
淘宝秀2010_958
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有