Hi
最近又有人@我了,为啥没下文了?
由于打通了几个关键问题,不想耗费无谓的时间去码代码
另外本人也懒惰了8年一直没有更新,今天借着不想干活,做个总结吧
一些关键问题
Q1:如果知道其它在线用户?
由于没有Server,所有要能显示所有在线用户,那么就可以通过2个方法
方法1:广播包的形式
方法2:遍历一遍自己所在子网的所有IP
发个UDP的包,到默认监听端口(自己可定),那么收到该消息,你就回复自己的IP和用户名,同时刷新自己的好友列表
收到该消息,刷新自己的好友列表,同样,如果退出,那么发个exit更新自己好友列表
Q2:为什么知道其它在线用户,要使用UDP?
因为要使用广播包,而广播包是基于UDP的
如果有些路由器禁止了广播包,可以通过方法2应对
Q3:如何传输文件?
使用TCP协议
由于TCP是基于流的,所以,你可以自己设置一个格式
64 bytes + 128 bytes +raw data
文件大小+ 文件名+文件数据
那么在接收端,伪代码如下
fileSize = read(64)
fileName = read(128)
data = read(fileSize )
saveFile(fileName,data)
Q4:为什么传输文件要用TCP而不是UDP?
因为TCP是有序的,可靠的。
如果使用UDP,可能产生乱序,还需要接收端重装
并且TCP支持多路复用,你可以同时接收不同的文件传输
TCP可以省掉你很多问题
Q5:其它问题?
暂时没想到,如果大家有问题,可以留言,我会尽快回复的