因为设定不同,服务器返回的数据不同,处理的方式也会有所变化。(本文代码是在Android中测试)
下面代码示例为:服务器返回的数据读取时需要使用ASCLL进行转换:
sendData("数据","服务器IP",端口号);//单独开启线程运行
public void sendData(String data,String serverIp,int serverPort) { try { Socket socket = new Socket(serverIp, serverPort); PrintWriter out = new PrintWriter(socket.getOutputStream(), true); byte[] buffer = new byte[1024]; String respondString = ""; // 发送数据 out.println(data); Log.w(TAG,"发送数据: " + data); InputStream in = socket.getInputStream(); int bytesRead = in.read(buffer); if (bytesRead > 0) { Log.w(TAG,"收到服务器响应: " + Arrays.toString(buffer)); for (int q = 0; q < buffer.length ; q++){ //将buffer读取到的ASCLL转换为原本的数据 char c = (char) buffer[q]; respondString = respondString + c; Log.w(TAG," buffer.length: "+ buffer.length+" buffer : "+ buffer[q] + " 数据:"+c); if (c == 0){ //服务器中读取到的数据的结尾,即buffer读取为空 break; } } Log.w(TAG,"收到服务器响应: respondString = " + respondString); } Log.w(TAG,"close"); // 关闭资源 in.close(); out.close(); socket.close(); } catch (Exception e) { Log.e(TAG,"socket error : " + e.getMessage()); } }