2023/4/16总结

深刻的了解了网络编程的一些知识点

socket:套接字

ServerSocket 用来声明服务器

Socket用来声明客户端,其实也不然,在serversocket的accept的方法中,返回的是一个socket变量。我觉得更像一个接口,网络接口。

InternetAddress可以用来获得IP地址,用它的getAddress方法,getbyName方法可以指定ip地址。

文件流

文件流比较多,字节流,字符流,通常网络编程使用较为多的是InputStream,OutputStream,对象流:ObjectOutputStream和ObjectInputStream,缓冲流:BufferOutputSream和BufferInputStream。

有一个专门为udp的包来发送,但是udp是不可靠连接,即使你没开服务器,也可以发出,因为它只管发出,不会管有没有到

在这几天的修改代码中遇到了很多问题。

一.传输的时候出现沾包问题

解决方案:

1.可以指定数据长度,然后去读写,但是这种方法效率低下

2.可以插入特定字符,读取的时候注意即可,个人认为回车符号是很可以的。

二.传输的时候都卡在一个点阻塞了

解决方案

1.可以利用flush去强制把流中的数据弹出。(shutdown不可以,shutdown使用的话会关闭流,也相当于关闭了通道)

三.如果一个对象当中设置了serversocket和socket,多次new对象,不是多线程的情况,会出现connection reset的情况。

解决方案

尽量在一个对象中进行操作

序列化

序列化:将 Java 对象转换成字节流的过程。

反序列化:将字节流转换成 Java 对象的过程。

当 Java 对象需要在网络上传输 或者 持久化存储到文件中时,就需要对 Java 对象进行序列化处理。

实现类实现Seriailizable 接口,读取的时候需要按照写入的顺序来。

 

提示,不要写过多的端口实现功能,很容易眼花缭乱,导致出错。

虽然踩了这么多坑,但是至今连上去的只有登录,并且还有点小bug在里面。

现在客户端和服务端还没分离出来,因为我的消息总是阻塞,尽管我使用了flush,各种流也试过了。只要消息传输次数多了,就容易阻塞。还没有找到原因,想试试对象流,以及序列化操作是否能解决该问题。

下面的这个账号和密码我是分了俩次发送

客户端

服务端

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值