package client; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.net.Socket; import java.net.UnknownHostException; import protocol.ProtoHead; import protocol.Msg.AddFriendMsg; import protocol.Msg.ChangeFriendMsg; import protocol.Msg.DeleteFriendMsg; import protocol.Msg.GetPersonalInfoMsg; import protocol.Msg.GetUserInfoMsg; import protocol.Msg.LoginMsg; import protocol.Msg.LogoutMsg; import protocol.Msg.PersonalSettingsMsg; import protocol.Msg.RegisterMsg; import server.NetworkPacket; import tools.DataTypeTranslater; import tools.Debug; public class SocketClientTest { public static final int HEAD_INT_SIZE = 4; public Socket socket; public InputStream inputStream; public OutputStream outputStream; // String host = "192.168.45.17"; // 要连接的服务端IP地址 public static final String host = "104.224.165.21"; // 要连接的服务端IP地址 // public static final String host = "127.0.0.1"; // 要连接的服务端IP地址 // public static final String host = "192.168.1.103"; // 要连接的服务端IP地址 // public static final String host = "192.168.45.17"; // 要连接的服务端IP地址 int port = 8081; // 要连接的服务端对应的监听端口 public static void main(String args[]) throws IOException { new SocketClientTest(); } public SocketClientTest() throws UnknownHostException, IOException { // 为了简单起见,所有的异常都直接往外抛 // int port = 8080; // 要连接的服务端对应的监听端口 // 与服务端建立连接 // 测心跳 // testKeepAlive(); // socket = new Socket(host, port); // inputStream = socket.getInputStream(); // outputStream = socket.getOutputStream(); // 测心跳 testKeepAlive(); // 测注册 // testRegister(); // 测登陆 // testLogin(); // 测个人设置 // testPersonalSettings(); // 测心跳 // testKeepAlive(); // 测注册 // testRegister(); // 测登陆 // testLogin(); // 测试个人设置 // testPersonalSettings(); // 测查看用户个人信息 // testGetUserInfo(); // 测添加好友 // testAddFriend(); // 测删除好友 // testDeleteFriend(); // 测退出登录 // testLogout(); // 测获取个人信息 // testGetPersonalInfo(); // new Thread(new readThread()).start(); } /** * ���ӷ����� * * @throws UnknownHostException * @throws IOException * @author Feng */ public void link() throws UnknownHostException, IOException { socket = new Socket(host, port); inputStream = socket.getInputStream(); outputStream = socket.getOutputStream(); } // 处理服务器回复问题 public byte[] readFromServer() throws IOException { // inputStream = socket.getInputStream(); byte[] byteArray = new byte[200]; // System.out.println(in.read(byteArray)); inputStream.read(byteArray); byteArray = cutResult(byteArray); // System.out.println("client �յ�Server ������ �� " + byteArray); // inputStream.close(); // System.out.println("client 收到Server 发来的 : " + byteArray); // inputStream.close(); return byteArray; } public byte[] readFromServer(InputStream inputStream) throws IOException { byte[] byteArray = new byte[200]; inputStream.read(byteArray); return byteArray; } public void writeToServer(byte[] arrayBytes) throws IOException { // outputStream = socket.getOutputStream(); outputStream.write(arrayBytes); // outputStream.close(); } public void writeToServer(OutputStream outputStreams, byte[] arrayBytes) throws IOException { // outputStream = socket.getOutputStream(); outputStream.write(arrayBytes); // outputStream.close(); } /** * 永久读线程 * * @author Feng * */ class readThread implements Runnable { @Override public void run() { try { // socket = new Socket(host, port); while (true) { Thread.sleep(1000); byte[] arrayBytes = readFromServer(); System.out.println("client 收到Server 发来的 : " + arrayBytes); System.out.println("size:" + DataTypeTranslater.bytesToInt(arrayBytes, 0)); System.out.println("Type:" + ProtoHead.ENetworkMessage.valueOf(DataTypeTranslater.bytesToInt(arrayBytes, HEAD_INT_SIZE)) .toString()); // 发回去 writeToServer(arrayBytes); } } catch (IOException e) { e.printStackTrace(); } catch (InterruptedException e) { e.printStackTrace(); } } } /** * 测试心跳功能 */ public void testKeepAlive() { System.out.println("Start Test KeepAliveSyc!"); try { socket = new Socket(host, port); inputStream = socket.getInputStream(); outputStream = socket.getOutputStream(); byte[] byteArray; // outputStream = socket.getOutputStream(); // writeToServer(byteArray); // inputStream = socket.getInputStream(); while (true) { byteArray = readFromServer(); System.out.println("Bytes size : " + byteArray.length); // System.out.println("Client get (): " + byteArray); // System.err.println("Start"); // for (byte b : byteArray) // System.err.println(b); // System.err.println("End"); if (byteArray.length < HEAD_INT_SIZE) { System.out.println("貌似连接断了, 测试结束!"); return; } int size = DataTypeTranslater.bytesToInt(byteArray, 0); System.out.println("Real size: " + size); ProtoHead.ENetworkMessage type = ProtoHead.ENetworkMessage.valueOf(DataTypeTranslater.bytesToInt(byteArray, HEAD_INT_SIZE)); System.out.println("Type : " + type.toString()); // for (byte b : byteArray) // System.out.println(b); if (type == ProtoHead.ENetworkMessage.KEEP_ALIVE_SYNC) { // byteArray2 = // NetworkMessage.packMessage(ProtoHead.ENetworkMessage.KEEP_ALIVE_SYNC_VALUE, // NetworkMessage.getMessageID(byteArray), new byte[0]); // byteArray2 = new byte[size]; // for (int i = 0; i < size; i++) // byteArray2[i] = byteArray[i]; Debug.log("Response 'keepAlivePacket'"); writeToServer(byteArray); } } } catch (IOException e) { e.printStackTrace(); } } /** * 测试注册功能 * * @author Feng */ public void testRegister() { RegisterMsg.RegisterReq.Builder builder = RegisterMsg.RegisterReq.newBuilder(); builder.setUserId("a3"); builder.setUserPassword("aa"); builder.setUserName("aaa3"); System.out.println("Start Test Register!"); try { socket = new Socket(host, port); inputStream = socket.getInputStream(); outputStream = socket.getOutputStream(); byte[] byteArray = NetworkPacket.packMessage(ProtoHead.ENetworkMessage.REGISTER_REQ.getNumber(), builder.build() .toByteArray()); System.out.println("MessageID : " + NetworkPacket.getMessageID(byteArray)); writeToServer(byteArray); while (true) { byteArray = readFromServer(); int size = DataTypeTranslater.bytesToInt(byteArray, 0); System.out.println("size: " + size); ProtoHead.ENetworkMessage type = ProtoHead.ENetworkMessage.valueOf(DataTypeTranslater.bytesToInt(byteArray, HEAD_INT_SIZE)); System.out.println("Type : " + type.toString()); if (type == ProtoHead.ENetworkMessage.REGISTER_RSP) { byte[] objBytes = new byte[size - NetworkPacket.getMessageObjectStartIndex()]; for (int i = 0; i < objBytes.length; i++) objBytes[i] = byteArray[NetworkPacket.getMessageObjectStartIndex() + i]; RegisterMsg.RegisterRsp response = RegisterMsg.RegisterRsp.parseFrom(objBytes); System.out.println("Response : " + RegisterMsg.RegisterRsp.ResultCode.valueOf(response.getResultCode().getNumber())); System.out.println("MessageID : " + NetworkPacket.getMessageID(byteArray)); } } } catch (IOException e) { e.printStackTrace(); } } /** * 测试注册功能(由JUnit调用) * * @author Feng * @return * @throws IOException */ public byte[] testRegister_JUint(String userId, String userPassword, String userName) throws IOException { RegisterMsg.RegisterReq.Builder builder = RegisterMsg.RegisterReq.newBuilder(); builder.setUserId(userId); builder.setUserPassword(userPassword); builder.setUserName(userName); byte[] byteArray = NetworkPacket.packMessage(ProtoHead.ENetworkMessage.REGISTER_REQ.getNumber(), builder.build() .toByteArray()); // System.out.println("MessageID : " + // NetworkMessage.getMessageID(byteArray)); writeToServer(outputStream, byteArray); while (true) { byteArray = readFromServer(inputStream); if (NetworkPacket.getMessageType(byteArray) != ProtoHead.ENetworkMessage.REGISTER_RSP) continue; return cutResult(byteArray); } } /** * 测试登陆功能(由JUnit调用) * * @param userId * @param userPassword * @return * @throws IOException * @throws UnknownHostException */ public byte[] testLogin_JUint(String userId, String userPassword) throws UnknownHostException, IOException { LoginMsg.LoginReq.Builder builder = LoginMsg.LoginReq.newBuilder(); builder.setUserId(userId); builder.setUserPassword(userPassword); byte[] byteArray = NetworkPacket.packMessage(ProtoHead.ENetworkMessage.LOGIN_REQ.getNumber(), builder.build() .toByteArray()); // outputStream = socket.getOutputStream(); writeToServer(byteArray); // inputStream = socket.getInputStream(); while (true) { byteArray = readFromServer(); ProtoHead.ENetworkMessage type = ProtoHead.ENetworkMessage.valueOf(DataTypeTranslater.bytesToInt(byteArray, HEAD_INT_SIZE)); if (type == ProtoHead.ENetworkMessage.LOGIN_RSP) { return byteArray; } } } /** * 测试登陆功能 */ public void testLogin() { LoginMsg.LoginReq.Builder builder = LoginMsg.LoginReq.newBuilder(); builder.setUserId("a3"); builder.setUserPassword("aa"); System.out.println("Start Test Login!"); try { socket = new Socket(host, port); inputStream = socket.getInputStream(); outputStream = socket.getOutputStream(); byte[] byteArray = NetworkPacket.packMessage(ProtoHead.ENetworkMessage.LOGIN_REQ.getNumber(), builder.build() .toByteArray()); // outputStream = socket.getOutputStream(); writeToServer(byteArray); // inputStream = socket.getInputStream(); while (true) { byteArray = readFromServer(); int size = DataTypeTranslater.bytesToInt(byteArray, 0); System.out.println("size: " + size); ProtoHead.ENetworkMessage type = ProtoHead.ENetworkMessage.valueOf(DataTypeTranslater.bytesToInt(byteArray, HEAD_INT_SIZE)); System.out.println("Type : " + type.toString()); if (type == ProtoHead.ENetworkMessage.LOGIN_RSP) { byte[] objBytes = new byte[size - NetworkPacket.getMessageObjectStartIndex()]; for (int i = 0; i < objBytes.length; i++) objBytes[i] = byteArray[NetworkPacket.getMessageObjectStartIndex() + i]; LoginMsg.LoginRsp response = LoginMsg.LoginRsp.parseFrom(objBytes); System.out .println("Response : " + LoginMsg.LoginRsp.ResultCode.valueOf(response.getResultCode().getNumber())); break; } } inputStream.close(); outputStream.close(); socket.close(); link(); // 断后重测 System.out.println("断后重测"); byteArray = NetworkPacket.packMessage(ProtoHead.ENetworkMessage.LOGIN_REQ.getNumber(), builder.build().toByteArray()); writeToServer(byteArray); while (true) { byteArray = readFromServer(); int size = DataTypeTranslater.bytesToInt(byteArray, 0); System.out.println("size: " + size); ProtoHead.ENetworkMessage type = ProtoHead.ENetworkMessage.valueOf(DataTypeTranslater.bytesToInt(byteArray, HEAD_INT_SIZE)); System.out.println("Type : " + type.toString()); if (type == ProtoHead.ENetworkMessage.LOGIN_RSP) { byte[] objBytes = new byte[size - NetworkPacket.getMessageObjectStartIndex()]; for (int i = 0; i < objBytes.length; i++) objBytes[i] = byteArray[NetworkPacket.getMessageObjectStartIndex() + i]; LoginMsg.LoginRsp response = LoginMsg.LoginRsp.parseFrom(objBytes); System.out .println("Response : " + LoginMsg.LoginRsp.ResultCode.valueOf(response.getResultCode().getNumber())); } if (type == ProtoHead.ENetworkMessage.CHANGE_FRIEND_SYNC) { byte[] objBytes = new byte[size - NetworkPacket.getMessageObjectStartIndex()]; for (int i = 0; i < objBytes.length; i++) objBytes[i] = byteArray[NetworkPacket.getMessageObjectStartIndex() + i]; ChangeFriendMsg.ChangeFriendSync response = ChangeFriendMsg.ChangeFriendSync.parseFrom(objBytes); System.out.println(response.getChangeType() + " " + response.getUserItem()); } } } catch (IOException e) { e.printStackTrace(); } } /** * 测试个人设置功能 * * @author WangFei */ public void testPersonalSettings() { PersonalSettingsMsg.PersonalSettingsReq.Builder builder = PersonalSettingsMsg.PersonalSettingsReq.newBuilder(); builder.setUserName("bbss"); // builder.setUserPassword("s1234"); builder.setHeadIndex(5); System.out.println("start personalSettings test! ----------------------------"); try { Socket socket = new Socket(host, port); inputStream = socket.getInputStream(); outputStream = socket.getOutputStream(); LoginMsg.LoginReq.Builder loginBuilder = LoginMsg.LoginReq.newBuilder(); loginBuilder.setUserId("a3"); loginBuilder.setUserPassword("aa"); byte[] loginByteArray = NetworkPacket.packMessage(ProtoHead.ENetworkMessage.LOGIN_REQ.getNumber(), loginBuilder .build().toByteArray()); writeToServer(loginByteArray); byte[] byteArray = NetworkPacket.packMessage(ProtoHead.ENetworkMessage.PERSONALSETTINGS_REQ.getNumber(), builder .build().toByteArray()); writeToServer(byteArray); while (true) { byteArray = readFromServer(); int size = DataTypeTranslater.bytesToInt(byteArray, 0); System.out.println("size: " + size); ProtoHead.ENetworkMessage type = ProtoHead.ENetworkMessage.valueOf(DataTypeTranslater.bytesToInt(byteArray, HEAD_INT_SIZE)); System.out.println("Type : " + type.toString()); if (type == ProtoHead.ENetworkMessage.PERSONALSETTINGS_RSP) { byte[] objBytes = new byte[size - NetworkPacket.getMessageObjectStartIndex()]; for (int i = 0; i < objBytes.length; i++) objBytes[i] = byteArray[NetworkPacket.getMessageObjectStartIndex() + i]; PersonalSettingsMsg.PersonalSettingsRsp response = PersonalSettingsMsg.PersonalSettingsRsp .parseFrom(objBytes); System.out.println("Response : " + PersonalSettingsMsg.PersonalSettingsRsp.ResultCode.valueOf(response.getResultCode().getNumber())); } if (type == ProtoHead.ENetworkMessage.OFFLINE_SYNC) { System.out.println("被下线"); } } } catch (IOException e) { e.printStackTrace(); } } /** * 测试个人设置--JUnit调用 * * @param userName * @param userPassword * @return * @throws IOException * @author wangfei */ public byte[] testPersonalSettings_JUnit(String userName, String userPassword, int headIndex) throws IOException { PersonalSettingsMsg.PersonalSettingsReq.Builder builder = PersonalSettingsMsg.PersonalSettingsReq.newBuilder(); builder.setUserName(userName); builder.setUserPassword(userPassword); builder.setHeadIndex(headIndex); byte[] byteArray = NetworkPacket.packMessage(ProtoHead.ENetworkMessage.PERSONALSETTINGS_REQ.getNumber(), builder.build() .toByteArray()); writeToServer(byteArray); while (true) { byteArray = readFromServer(); ProtoHead.ENetworkMessage type = ProtoHead.ENetworkMessage.valueOf(DataTypeTranslater.bytesToInt(byteArray, HEAD_INT_SIZE)); if (type == ProtoHead.ENetworkMessage.PERSONALSETTINGS_RSP) { return byteArray; } } } /** * 用于剪切从服务器发过来的byte[] * * @param byteArray * @return */ public byte[] cutResult(byte[] byteArray) { int size = DataTypeTranslater.bytesToInt(byteArray, 0); byte[] result = new byte[size]; for (int i = 0; i < size; i++) result[i] = byteArray[i]; return result; } /** * 测试获取用户信息功能 * * @author wangfei */ public void testGetUserInfo() { GetUserInfoMsg.GetUserInfoReq.Builder builder = GetUserInfoMsg.GetUserInfoReq.newBuilder(); builder.addTargetUserId("Fuck"); System.out.println("start test SearchUser! -----------------------"); try { Socket socket = new Socket(host, port); inputStream = socket.getInputStream(); outputStream = socket.getOutputStream(); LoginMsg.LoginReq.Builder loginBuilder = LoginMsg.LoginReq.newBuilder(); loginBuilder.setUserId("a"); loginBuilder.setUserPassword("aa"); byte[] loginByteArray = NetworkPacket.packMessage(ProtoHead.ENetworkMessage.LOGIN_REQ.getNumber(), loginBuilder .build().toByteArray()); writeToServer(loginByteArray); byte[] byteArray = NetworkPacket.packMessage(ProtoHead.ENetworkMessage.GET_USERINFO_REQ.getNumber(), builder.build() .toByteArray()); writeToServer(byteArray); while (true) { byteArray = readFromServer(); int size = DataTypeTranslater.bytesToInt(byteArray, 0); System.out.println("size: " + size); ProtoHead.ENetworkMessage type = ProtoHead.ENetworkMessage.valueOf(DataTypeTranslater.bytesToInt(byteArray, HEAD_INT_SIZE)); System.out.println("Type : " + type.toString()); if (type == ProtoHead.ENetworkMessage.GET_USERINFO_RSP) { byte[] objBytes = new byte[size - NetworkPacket.getMessageObjectStartIndex()]; for (int i = 0; i < objBytes.length; i++) objBytes[i] = byteArray[NetworkPacket.getMessageObjectStartIndex() + i]; GetUserInfoMsg.GetUserInfoRsp response = GetUserInfoMsg.GetUserInfoRsp.parseFrom(objBytes); System.out.println("Response : " + GetUserInfoMsg.GetUserInfoRsp.ResultCode.valueOf(response.getResultCode().getNumber())); if (response.getResultCode().equals(GetUserInfoMsg.GetUserInfoRsp.ResultCode.SUCCESS)) { System.out.println("searchResult UserId:" + response.getUserItem(0).getUserId() + " UserName:" + response.getUserItem(0).getUserName()); } } } } catch (IOException e) { e.printStackTrace(); } } /** * 测试获取用户信息--JUnit调用 * * @param targetUserId * @return * @throws IOException * @author wangfei */ public byte[] testGetUserInfo_JUnit(String targetUserId) throws IOException { GetUserInfoMsg.GetUserInfoReq.Builder builder = GetUserInfoMsg.GetUserInfoReq.newBuilder(); builder.addTargetUserId(targetUserId); byte[] byteArray = NetworkPacket.packMessage(ProtoHead.ENetworkMessage.GET_USERINFO_REQ.getNumber(), builder.build() .toByteArray()); writeToServer(byteArray); while (true) { byteArray = readFromServer(); ProtoHead.ENetworkMessage type = ProtoHead.ENetworkMessage.valueOf(DataTypeTranslater.bytesToInt(byteArray, HEAD_INT_SIZE)); if (type == ProtoHead.ENetworkMessage.GET_USERINFO_RSP) { return byteArray; } } } /** * 测试添加好友功能 * * @author wangfei */ public void testAddFriend() { AddFriendMsg.AddFriendReq.Builder builder = AddFriendMsg.AddFriendReq.newBuilder(); builder.setFriendUserId("a3"); System.out.println("start test AddFriend! -----------------------"); try { Socket socket = new Socket(host, port); inputStream = socket.getInputStream(); outputStream = socket.getOutputStream(); LoginMsg.LoginReq.Builder loginBuilder = LoginMsg.LoginReq.newBuilder(); loginBuilder.setUserId("a2"); loginBuilder.setUserPassword("aa"); byte[] loginByteArray = NetworkPacket.packMessage(ProtoHead.ENetworkMessage.LOGIN_REQ.getNumber(), loginBuilder .build().toByteArray()); writeToServer(loginByteArray); byte[] byteArray = NetworkPacket.packMessage(ProtoHead.ENetworkMessage.ADD_FRIEND_REQ.getNumber(), builder.build() .toByteArray()); writeToServer(byteArray); while (true) { byteArray = readFromServer(); int size = DataTypeTranslater.bytesToInt(byteArray, 0); System.out.println("size: " + size); ProtoHead.ENetworkMessage type = ProtoHead.ENetworkMessage.valueOf(DataTypeTranslater.bytesToInt(byteArray, HEAD_INT_SIZE)); System.out.println("Type : " + type.toString()); if (type == ProtoHead.ENetworkMessage.ADD_FRIEND_RSP) { byte[] objBytes = new byte[size - NetworkPacket.getMessageObjectStartIndex()]; for (int i = 0; i < objBytes.length; i++) objBytes[i] = byteArray[NetworkPacket.getMessageObjectStartIndex() + i]; AddFriendMsg.AddFriendRsp response = AddFriendMsg.AddFriendRsp.parseFrom(objBytes); System.out.println("Response : " + AddFriendMsg.AddFriendRsp.ResultCode.valueOf(response.getResultCode().getNumber())); } } } catch (IOException e) { e.printStackTrace(); } } /** * 测试添加好友--JUnit调用 * * @param friendUserId * @return * @throws IOException */ public byte[] testAddFriend_JUnit(String friendUserId) throws IOException { AddFriendMsg.AddFriendReq.Builder builder = AddFriendMsg.AddFriendReq.newBuilder(); builder.setFriendUserId(friendUserId); byte[] byteArray = NetworkPacket.packMessage(ProtoHead.ENetworkMessage.ADD_FRIEND_REQ.getNumber(), builder.build() .toByteArray()); writeToServer(byteArray); while (true) { byteArray = readFromServer(); ProtoHead.ENetworkMessage type = ProtoHead.ENetworkMessage.valueOf(DataTypeTranslater.bytesToInt(byteArray, HEAD_INT_SIZE)); if (type == ProtoHead.ENetworkMessage.ADD_FRIEND_RSP) { return byteArray; } } } /** * 测试删除好友功能 * * @author wangfei */ public void testDeleteFriend() { DeleteFriendMsg.DeleteFriendReq.Builder builder = DeleteFriendMsg.DeleteFriendReq.newBuilder(); builder.setFriendUserId("a1"); System.out.println("start test DeleteFriend! -----------------------"); try { Socket socket = new Socket(host, port); inputStream = socket.getInputStream(); outputStream = socket.getOutputStream(); LoginMsg.LoginReq.Builder loginBuilder = LoginMsg.LoginReq.newBuilder(); loginBuilder.setUserId("a2"); loginBuilder.setUserPassword("s1234"); byte[] loginByteArray = NetworkPacket.packMessage(ProtoHead.ENetworkMessage.LOGIN_REQ.getNumber(), loginBuilder .build().toByteArray()); writeToServer(loginByteArray); byte[] byteArray = NetworkPacket.packMessage(ProtoHead.ENetworkMessage.DELETE_FRIEND_REQ.getNumber(), builder.build() .toByteArray()); writeToServer(byteArray); while (true) { byteArray = readFromServer(); int size = DataTypeTranslater.bytesToInt(byteArray, 0); System.out.println("size: " + size); ProtoHead.ENetworkMessage type = ProtoHead.ENetworkMessage.valueOf(DataTypeTranslater.bytesToInt(byteArray, HEAD_INT_SIZE)); System.out.println("Type : " + type.toString()); if (type == ProtoHead.ENetworkMessage.DELETE_FRIEND_RSP) { byte[] objBytes = new byte[size - NetworkPacket.getMessageObjectStartIndex()]; for (int i = 0; i < objBytes.length; i++) objBytes[i] = byteArray[NetworkPacket.getMessageObjectStartIndex() + i]; DeleteFriendMsg.DeleteFriendRsp response = DeleteFriendMsg.DeleteFriendRsp.parseFrom(objBytes); System.out.println("Response : " + DeleteFriendMsg.DeleteFriendRsp.ResultCode.valueOf(response.getResultCode().getNumber())); } } } catch (IOException e) { e.printStackTrace(); } } /** * 测试删除好友--JUnit调用 * * @param friendUserId * @return * @throws IOException * @author wangfei */ public byte[] testDeleteFriend_JUnit(String friendUserId) throws IOException { DeleteFriendMsg.DeleteFriendReq.Builder builder = DeleteFriendMsg.DeleteFriendReq.newBuilder(); builder.setFriendUserId(friendUserId); byte[] byteArray = NetworkPacket.packMessage(ProtoHead.ENetworkMessage.DELETE_FRIEND_REQ.getNumber(), builder.build() .toByteArray()); writeToServer(byteArray); while (true) { byteArray = readFromServer(); ProtoHead.ENetworkMessage type = ProtoHead.ENetworkMessage.valueOf(DataTypeTranslater.bytesToInt(byteArray, HEAD_INT_SIZE)); if (type == ProtoHead.ENetworkMessage.DELETE_FRIEND_RSP) { return byteArray; } } } /** * 测试退出登录 * * @author wangfei */ public void testLogout() { LogoutMsg.LogoutReq.Builder builder = LogoutMsg.LogoutReq.newBuilder(); try { Socket socket = new Socket(host, port); inputStream = socket.getInputStream(); outputStream = socket.getOutputStream(); LoginMsg.LoginReq.Builder loginBuilder = LoginMsg.LoginReq.newBuilder(); loginBuilder.setUserId("a2"); loginBuilder.setUserPassword("aa"); byte[] loginByteArray = NetworkPacket.packMessage(ProtoHead.ENetworkMessage.LOGIN_REQ.getNumber(), loginBuilder .build().toByteArray()); writeToServer(loginByteArray); byte[] byteArray = NetworkPacket.packMessage(ProtoHead.ENetworkMessage.LOGOUT_REQ.getNumber(), builder.build() .toByteArray()); writeToServer(byteArray); while (true) { byteArray = readFromServer(); int size = DataTypeTranslater.bytesToInt(byteArray, 0); ProtoHead.ENetworkMessage type = ProtoHead.ENetworkMessage.valueOf(DataTypeTranslater.bytesToInt(byteArray, HEAD_INT_SIZE)); if (type == ProtoHead.ENetworkMessage.LOGOUT_RSP) { byte[] objBytes = new byte[size - NetworkPacket.getMessageObjectStartIndex()]; for (int i = 0; i < objBytes.length; i++) objBytes[i] = byteArray[NetworkPacket.getMessageObjectStartIndex() + i]; LogoutMsg.LogoutRsp response = LogoutMsg.LogoutRsp.parseFrom(objBytes); System.out.println("Response : " + LogoutMsg.LogoutRsp.ResultCode.valueOf(response.getResultCode().getNumber())); } } } catch (IOException e) { e.printStackTrace(); } } /** * 测试退出登录--JUnit调用 * * @return * @throws IOException * @author wangfei */ public byte[] testLogout_JUnit() throws IOException { LogoutMsg.LogoutReq.Builder builder = LogoutMsg.LogoutReq.newBuilder(); byte[] byteArray = NetworkPacket.packMessage(ProtoHead.ENetworkMessage.LOGOUT_REQ.getNumber(), builder.build() .toByteArray()); writeToServer(byteArray); while (true) { byteArray = readFromServer(); ProtoHead.ENetworkMessage type = ProtoHead.ENetworkMessage.valueOf(DataTypeTranslater.bytesToInt(byteArray, HEAD_INT_SIZE)); if (type == ProtoHead.ENetworkMessage.LOGOUT_RSP) { return byteArray; } } } /** * 测获取个人信息--包括基本信息和好友信息 * * @author wangfei */ public void testGetPersonalInfo() { System.out.println(" start test getPersonalInfo ---------"); GetPersonalInfoMsg.GetPersonalInfoReq.Builder builder = GetPersonalInfoMsg.GetPersonalInfoReq.newBuilder(); builder.setFriendInfo(true); builder.setUserInfo(true); builder.setGroupInfo(true); try { Socket socket = new Socket(host, port); inputStream = socket.getInputStream(); outputStream = socket.getOutputStream(); LoginMsg.LoginReq.Builder loginBuilder = LoginMsg.LoginReq.newBuilder(); loginBuilder.setUserId("a3"); loginBuilder.setUserPassword("aa"); byte[] loginByteArray = NetworkPacket.packMessage(ProtoHead.ENetworkMessage.LOGIN_REQ.getNumber(), loginBuilder .build().toByteArray()); writeToServer(loginByteArray); byte[] byteArray = NetworkPacket.packMessage(ProtoHead.ENetworkMessage.GET_PERSONALINFO_REQ.getNumber(), builder .build().toByteArray()); writeToServer(byteArray); while (true) { byteArray = readFromServer(); System.out.println(" read from server !"); int size = DataTypeTranslater.bytesToInt(byteArray, 0); ProtoHead.ENetworkMessage type = ProtoHead.ENetworkMessage.valueOf(DataTypeTranslater.bytesToInt(byteArray, HEAD_INT_SIZE)); System.out.println(type); if (type == ProtoHead.ENetworkMessage.GET_PERSONALINFO_RSP) { byte[] objBytes = new byte[size - NetworkPacket.getMessageObjectStartIndex()]; for (int i = 0; i < objBytes.length; i++) objBytes[i] = byteArray[NetworkPacket.getMessageObjectStartIndex() + i]; GetPersonalInfoMsg.GetPersonalInfoRsp response = GetPersonalInfoMsg.GetPersonalInfoRsp.parseFrom(objBytes); System.out.println("Response : " + GetPersonalInfoMsg.GetPersonalInfoRsp.ResultCode.valueOf(response.getResultCode().getNumber())); System.out.println(response.getUserInfo()); System.out.println(response.getFriendsList()); System.out.println(response.getGroupsList()); } } } catch (IOException e) { } } /** * 测获取个人信息--包括基本信息和好友信息 --JUnit调用 * * @return * @author wangfei * @throws IOException * @time 2015-03-26 */ public byte[] testGetPersonalInfo_JUnit(boolean userInfo, boolean friendInfo) throws IOException { GetPersonalInfoMsg.GetPersonalInfoReq.Builder builder = GetPersonalInfoMsg.GetPersonalInfoReq.newBuilder(); builder.setUserInfo(userInfo); builder.setFriendInfo(friendInfo); byte[] byteArray = NetworkPacket.packMessage(ProtoHead.ENetworkMessage.GET_PERSONALINFO_REQ.getNumber(), builder.build() .toByteArray()); writeToServer(byteArray); while (true) { byteArray = readFromServer(); ProtoHead.ENetworkMessage type = ProtoHead.ENetworkMessage.valueOf(DataTypeTranslater.bytesToInt(byteArray, HEAD_INT_SIZE)); if (type == ProtoHead.ENetworkMessage.GET_PERSONALINFO_RSP) { return byteArray; } } } }