Java与简单C/S架构笔记
C/S架构即客户端/服务端架构,这里用基于TCP通信的Java.net类 Socket和ServerSocket实现
Socket
Socket类即客户端套接字接口的实现,套接字是两台机器连接的端点。
创建Socket对象即向服务端发出请求,建立两者通信
Socket的其中两种构造器:
Socket conn = new Socket(InetAddress address, int port)
Socket(InetAddress host, int port, boolean stream)
客户端与服务端之间的信息传输是通过输入输出流来实现的,因此又有以下方法又来返回Socket的输入输出流:
OutputStream getOutputStream()
InputStream getInputStream()
注意:
当使用其他流进行操作时,此处以DataInputStream为例:
Socket conn = new Socket(xxx,xxx);
DataInputStream dis = new DataInputStream(conn.getInputStream);
应在外层new一个对应的转换流,ServerSocket同理
ServerSocket
ServerSocket类即服务器套接字接口的实现,服务器套接字 等待通过网络传入的请求,并基于请求进行操作。
ServerSocket的构造器之一:
//通过端口创建对象
ServerSocket(int port)
ServerSocket通过accept()方法侦听连接并接受,然后返回连接的Socket对象
Socket accept()
如此获得连接的Socket对象后,便可通过Socket对象的流进行操作
ServerSocket ss = new ServerSocket(xxxx);
//在端口xxxx侦听连接
ss.accept();
注意:
当accept没有侦听到对象时会一直阻塞
关于流的操作
数据多次写入时,将数据暂存到某个对象上,将所有数据转移到对象上后再将该对象写入输出流。
而不要使用输入流多次写入,这里我暂时遇到了无法解决的问题。例如:
String temp = null;
ResultSet rs = xxxx;
DataOutputStream dos = xxx;
while(rs.next()){
if(temp == null){
temp = rs.getString(xxx);
}else{
temp += rs.getString(xxx);
}
}
dos.writeUTF(temp);
dos.flush();