您的位置:首页 > 理论基础 > 计算机网络

Socket TCP通信 客户端给服务端发送数据

2017-01-13 11:58 316 查看
客户端发送数据
public class SocketSend {

public static Socket socket = null;
private static String TAG = "send";

public interface SendListener {
void OnResult(String ip, String result);
}

private static SendListener sendListener = null;

public static void setListener(SendListener l) {
sendListener = l;
}

//sendmsg
public static void sendMsg(String server, int port, String msg)
throws Exception {
try {
LogUtils.d(TAG, " sendMsg Connected to server " + server + " port:"
+ port + " msg:" + msg);
} catch (Exception e) {
LogUtils.e(TAG, "", e);
}
socket = null;
byte[] data = msg.getBytes();
socket = new Socket(server, port);
LogUtils.d(TAG, "Connected to server ... sending echo string");
InputStream in = socket.getInputStream();
OutputStream out = socket.getOutputStream();
out.write(data);
int bytesRcvd;// Bytes received in last read
byte[] b = new byte[4096];
StringBuilder builder = new StringBuilder();
while ((bytesRcvd = in.read(b)) != -1) {
LogUtils.d(TAG, "recvMsgSize:" + bytesRcvd);
String res = new String(b).trim();
builder.append(res);
if (res.endsWith("</msg>")) {
break;
}
}
LogUtils.d(TAG, "Received:" + builder);
sendListener.OnResult(server, builder.toString());
if (in != null) {
in.close();
}
if (out != null) {
out.close();
}
if (socket != null) {
socket.close();
}
}
}

//服务端读取客户端发送的数据
public void readSocket(int port) {

while (true) {

ServerSocket serverSocket = null;

Socket skt;
StringBuilder builder = new StringBuilder();
byte[] receiveBuf = new byte[1024];
try {
serverSocket = new ServerSocket(port);
serverSocket.setReuseAddress(true);

Log.e(TAG, "手机作为服务端监听PC端连接");
skt = serverSocket.accept();
Log.e(TAG, "收到PC信息");
InetSocketAddress clientAddress = (InetSocketAddress) skt
.getRemoteSocketAddress();
Log.d(TAG, " PC端已连接到手机 端地址:" + clientAddress);
int recvMsgSize;
InputStream in = skt.getInputStream();
OutputStream out = skt.getOutputStream();
while ((recvMsgSize = in.read(receiveBuf)) != -1) {
Log.e(TAG, "Box is Service recvMsgSize:" + recvMsgSize);
String res = new String(receiveBuf).trim();
builder.append(res);
if (res.endsWith("</msg>")) {
break;
}
}

Log.e(TAG, "接收PC端发回的数据为:" + builder.toString());
handleMessage("", builder.toString());

String XML = "";
if (builder.toString().contains("throughput")) {
XML = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n"
+ "<msg>\n" + "<cmd>ret</cmd>\n" + "<result>"
+ "ok" + "</result>\n" + "<sender>stb</sender>\n"
+ "</msg>\n";
} else {
XML = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n"
+ "<msg>\n" + "<cmd>ret</cmd>\n" + "<result>"
+ "throughput_ok" + "</result>\n"
+ "<sender>stb</sender>\n" + "</msg>\n";
}
// 接收完毕后回写OK给服务端
out.write(XML.getBytes(), 0, XML.getBytes().length);
Log.e(TAG, "盒子写回OK消息给PC端 " + XML);
} catch (Exception e) {
Log.e(TAG, "", e);
e.printStackTrace();
// reConnectWiFi(); // 重新建立服务端
} finally {
if (serverSocket != null) {
try {
serverSocket.close();
} catch (IOException e1) {
e1.printStackTrace();
}
}
}
}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  java android server socket
相关文章推荐