网络编程:
在网络通信写一下,不同计算机运行的程序,可以进行数据传输
IP地址:设备(手机、电脑等)在网络中的地址,是唯一的标识
端口:应用程序在设备中唯一的表示
协议:数据在网络中传输的规则,常见协议有UDP、TCP
dns服务器是什么?这个硬件是存储在哪里的?
IP通过DNS解析域名,域名的作用:方便记忆
cmd常用命令符
ipconfig:查看本机IP地址
ping IP地址:检查网络是否连通
特殊地址:
127.0.0.1 是回送地址,也称本地回环地址,可以代表本机IP,一般测试使用
连接图书馆wifi:?
没有连网:
连手机热点:
得出结论是:每次连网,ipv4地址都是不一样的,但连同一个wifi是一样的
三次获取都不一样,是什么原因?
协议:就是传输的规则
数据传输分:发送端、接收端
UDP的三种通信方式:
单播
组播:(发送端还是一个,接收端是多个)
广播:和单播写法一样,除了地址修养修改为:255.255.255.255
单播:
如何运行多个窗口?
组播:
TCP:
运行前需要提前创建接收端,否则发送端会报错,在当Socket创建时就会自动检索地址
快捷键:Ctrl+Shift+Alt+C:可获得文件得全路径名
注意:读取中文是2、3个字节,一个字节一个字节读是不对的会乱码
先运行服务器,再运行客户端
accept方法是阻塞的,会一直等待客户端发送数据
read方法也是阻塞(在read后面打印)
如果保证客户端连接服务器?
通过三次握手协议保证服务器之间的连接
read也是阻塞,因为当读完字符串内容,没有空格,或其他结束标识符
测试方法:
结论:当客户端运行close()关闭流时,会发送发送标识符
最后一步断开连接,会通过四次挥手协议保证终止
三次握手:
四次挥手:
为什么关闭一个缓冲区输出流之前应使用flush方法?http://t.csdn.cn/IKXGe
服务端优化---循环
将serverSocket.close()注释掉,因为要循环执行不到,然后除serverSocket以外用while(true)死循环包裹
可以实现多次接收或多客户端接收-但出现服务端每次创建的文件名都是固定的,导致覆盖
解决方式:UUID
服务端优化--UUID
直接用UUID.randomUUID().toString()+".jpg"(别忘了加文件格式)
服务端优化--多线程
服务端优化--线程池