网络编程基础知识
关于Socket
几个方法 的 流程
Socket类和accept
- 服务器端先定下来,哪个端口通讯(如9999)
- accpet()就是在等待连接
- 客户端那边确认要连9999
accept();
一个accept 就可以产生一个专门负责一个客户端的Socket
ServerSocket 就可以产生多个accpet
Soceket作为客户端,就产生一个socket
IO流 和 结束标记
OutputStream os= new OutputStream();
os.write("内容".getBytes());
就是创造个空水桶,等着装内容。
InputStream一样的
发送的每一条消息,
要在消息前后加上个前后缀,程序才能知道是否说完内容
socket.shutdownOutput()----这个是字节流的
writer.newLine(); 这个必须要用readLine() 才认识;
字节/字符 流
带Reader/Writer 的 字符流,尽量文本文件
Buffered就是包装处理的作用
抽象基类:需要前缀来标定
例如:ObjectWrite就是图省事,干脆直接把整个对象都发出去
当然,前提是需要用writeObject所写入的类必须要实现serilizebal接口
传文件
关于服务器和客户端线程的模型
由图可以了解到,几个进程、线程的关系是
客户端:
进程产生main进程
—>main进程内部产生和服务器通讯的线程。
但是,main消失,不代表通信线程不消失。
所以,正常退出的方法如图:
从main弄一个message对象给服务器过去
—>服务器那边拿到信息,根据信息,把对应Socket移出去
—>socket以及对应的线程消失、停止
私聊思路+模型
首先明确一个概念
每一个客户端,都是一个线程。
都是批量生产制造的。
在聊天的时候,A发消息,B收消息;下一次则是B发消息、A收消息。
不要把客户端分开看,其实都要准备一个专门负责发的socket,还也要准备一个收的socket。