简易 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

 

转载于:https://www.cnblogs.com/Bw98blogs/p/10680696.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值