zoukankan      html  css  js  c++  java
  • 简易 socket 通信程序

    题目要求


      完成如下的网路通信程序:

    • 1 建立服务端程序,服务器端程序接收来自客户端的请求;
    • 2 从网上下载程序,英语900句,每句占一行;
    • 3 服务端读取该文件,保存到集合或者列表中;
    • 4 建立客户端程序,使用”sentence: <编号#>,<编号#>”的格式发生数据。例如:发送”sentense:1,2,3” , 服务端把相应编号的句子发送给客户端,并加以呈现;
    • 5 客户端需要把服务端发送的句子保存起来,如果已经保存有相应的句子,将不再保存。
    • 6 客户端需要把从服务端获取的数据存储到文件中。
    • 7 增加对话协议,使“talk:<谈话内容>”来进行服务端和客户端的交互,服务端和客户端都可以进行谈话的发送和响应。服务器端和客户端都要根据对方请求的内容进行相应的处理。

    思路


      

      在socket通信中频繁读取套接字和频繁读写文件是 IO 密集型且非排斥锁的任务,所以对于这些任务代码采用多线程机制可能效率更高。而且任务中的很多场景都需要多线程去完成,比如一个服务器端开多个线程并维护一个线程池以应对多个客户端的请求,客户端发送与接收两线程分离以实现客户端给服务器发送数据时无需一来一回(即避免 input 阻塞了接收数据代码)。

      数据接收也是一个问题,程序中客户端与服务器端之间的连接不是短连接/一次连接(客户端一次请求 -> 服务器应答 -> 客户端),而是长链接。两者对应的接收数据的方式是不同的,前者只需要判断 socket 通信时输出流最后的空串即可,而后者需要使用尾标识以及其他办法实现数据的接收。还有,短连接和长连接对应的代码设计区别也是很大的,后者需要在客户端代码加入循环控制。

    代码


      已经上传到了 github,仓库地址为:https://github.com/bw98/SocketTask2

  • 相关阅读:
    求职准备:大一到大三,做好五件大事!
    研发过程管理导图第一稿(转)
    【推荐收藏】Visual Studio 插件库(转)
    提高C#编程水平的50个要点
    VC++和Matlab
    matlab混合编程向导(vc,vb,.net...)
    Matlab多线程运算的问题
    产生的DLL (VS2005, MATLAB7.5, mwArray)
    matlabsum函数用法
    SWFUpload V2.2.0 说明文档
  • 原文地址:https://www.cnblogs.com/Bw98blogs/p/10680696.html
Copyright © 2011-2022 走看看