在Java中的通信主要是通过使用socket进行通信的,通信主要运用的是C\S 模式,即服务器和客户机。
主动请求链接的时客户机,等待链接的是服务器。在创建服务器时指定是那个端口,而客户机则通过服务器的ip地址和端口来和服务器进行链接。
服务器的建立:
ServerSocket ss=new ServerSocket(9876);//在端口号为9876的端口上建立一个服务器
Socket client=ss.accept();//等待来自客户机的连接请求,并返回一个与客户机建立通信的socket
InputStream ins=client.getInputStream();//取得输入流
OutputStream ou=client.getOutputStream();//取得输出流
客服机的建立和链接:
Socket client=new Socket("localhost",9876);//创建一个和本机上端口为9876服务器相连接的socket对象
OutputStream out=client.getOutputStream();
InputStream ins=client.getInputStream();
通信的核心代码就是上述的几行,以后实现客户机和服务器的数据发送和读取,就是从输入流上读取、向输出流中写入。但是在数据的传送中,数据是以字节来传送的,而且数据的读取是被动的,也就是说数据读取是程序并不知道何时读取完毕,也不知道读取的数据如何划分,所以我们要给这些数据定义一个协议,比如我们用一个#号来标记一句完整的消息,又比如在一句完整消息的头部的4个字节用来记录这个消息的长度等。协议我们可以自定义,但是客户机和服务器要使用同一套的协议。
数据的读取:下面是读取一句以#定义结尾的消息
String msg;
while(true){
StringBuffer sbu=new StringBuffer();
char a=0;
while(a!=#){
int d=ins.read();
a=(char)d;
sbu.append(a);
}
msg=sbu.toString().trim();
}