问题描述
- java socket 多次反复通信
-
我用java socket实现简单的通讯功能,在做登陆的时候,客户端将用户名密码读取出来
发送给服务器(这是第一步),服务器读取信息后校验(这是第二步),校验后发送给客户端,客户端读取是否登陆成功的消息(这是第三步),但是,第一步第二步都没问题,但客户端无法将服务器再次发送的消息读取出来,下面是我的部分代码,我不知道怎么实现这种多次反复通信的问题,希望大家不吝赐教。
服务器代码:
output = new OutputStreamWriter(socket.getOutputStream());
input = new DataInputStream(socket.getInputStream());
byte [] b2=new byte[1024];
int len=input.read(b2);
String str = new String(b2,0,len); //读取用户名密码
System.out.println("客户端接收到的用户名密码:"+str);
//此处校验代码省略,假设用户名密码正确
output.write("reponse:1"); //发送给客户端登陆消息
System.out.println("服务器消息:登陆消息已发给客户端");服务器控制台:
已启动监听,调用线程进入等待阶段……
服务器消息,客户端已响应
服务器消息:服务器已经建立与客户端的连接,客户端ip:/127.0.0.1
已启动监听,调用线程进入等待阶段……
客户端接收到的用户名密码:command:1;userName:username;passWord:password
服务器消息:登陆消息已发给客户端客户端代码:
input = new BufferedReader(
new InputStreamReader(socket.getInputStream()));
DataOutputStream output =
new DataOutputStream(socket.getOutputStream());
byte[] b = MainWindow.DATA.getBytes(); //将用户名密码转化为byte
output.write(b); //发送给服务器
System.out.println("用户名,密码信息已发送");
output.flush();
String str = input.readLine(); //读取服务器消息
System.out.println("客户端消息:已读取到登录信息");
if(str.equals("reponse:1")){
LoginDialogs.AUTH = true; //授予客户端登录权限
}
System.out.println(LoginDialogs.AUTH);
客户端控制台:
已连接
登陆按钮消息:已点击
用户名,密码信息已发送
解决方案
今天在做一个东东的时候,再次用到了socket,对于java来说,简单的网络通信,基本都会想到使用socket实现。那么接下来问题来了,挖掘机技术哪家强呢?(ps:开个玩笑哈)
在socket通信的时候,当传输数据的时候,可能使用String字符串类型,byte数组类型,等等。那么问题真的来了,使用String字符串怎传输呢?这个就是今天的话题,那么直接上代码喽:(注:主要要看红色标记的,绿......
答案就在这里:java中的Socket通信