最近项目突然用到C#的Socket服务端,而需要java客户端连接并接收返回数据!由于没接触过C#研究了整整一天才得意解决,我们常用的java客户端是利用BufferedReader 以及 PrintWriter 流读取以及发送数据,然而对于C#服务端这种方式却是行不通的,观看C#代码发现其发送的直接是一个直接流形式,那么我们就得以字节流形式接收!利用
DataOutputStream 以及DataIutputStream 进行发送接收并指定字符集就可以实现通信了!
import java.io.DataInputStream; import java.io.DataOutputStream; import java.io.IOException;import java.net.Socket; public class SIP2Client { private int port; private String host; private Socket socket; public SIP2Client(int port,String host){ this.port = port; this.host = host; try { socket = new Socket(host, port); } catch (IOException e) { System.out.println("socket初始化失败" + e.getMessage() + host); } } public boolean sendMessage (String message,String charsetName) { boolean flag = false; try { DataOutputStream dos = new DataOutputStream(socket.getOutputStream()); dos.write(message.getBytes(charsetName)); dos.flush(); flag = true; } catch (IOException e) { System.out.println("请求发送失败:" + e.getMessage()); } return flag; } public String getMessage (String charsetName){ String message = null; try { DataInputStream dis = new DataInputStream(socket.getInputStream()); byte[] bytes = new byte[8*1024]; dis.read(bytes, 0, bytes.length); message = new String(bytes, charsetName); } catch (IOException e) { System.out.println("数据接收失败:" + e.getMessage()); } return message; } public Socket getSocket() { return socket; } public void setSocket(Socket socket) { this.socket = socket; } public int getPort() { return port; } public void setPort(int port) { this.port = port; } public String getHost() { return host; } public void setHost(String host) { this.host = host; } } |