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();
}
}
}
}
}
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();
}
}
}
}
}
相关文章推荐
- 一个简单的socket服务端和客户端程序:客户端发送数据给服务端,服务端接收到数据后再给客户端发送数据
- TCP与UDP的异同(服务端接收数据,客户端发送数据)
- Tcp服务端一直sleep,客户端不断发送数据产生的问题
- (四)XML基础(客户端和服务端发送与接收xml数据)
- nio中客户端发送一次数据,服务端通过多次readable事件才能完整读取
- 客户端输入字母数据,发送给服务端,服务端收到数据后,将其转换成大写字母发送到客户端,并打印到控制台
- TCP-客户端给服务端发送数据,服务端收到后,给客户端反馈信息
- socekt客户端想socekt服务端发送数据
- Tcp服务端一直sleep,客户端不断发送数据产生的问题
- Socket客户端和服务端通讯 要求客户端发送数据后回显同样数据
- 模仿客户端通过http协议向服务端发送和接收数据
- C# iocp通讯客户端只能发送数据,无法接收服务端发送的数据
- 使用客户端软件向服务端php程序发送post数据,php接受三种方法
- socket客户端数据发送的数据服务端接收不到
- TCP与UDP的异同(服务端接收数据,客户端发送数据)
- TCP与UDP的异同(服务端接收数据,客户端发送数据)
- 客户端POST发送json数据给服务端,客户端端接收服务器端json数据响应
- Java Socket 服务端发送数据 客户端接收数据
- Tcp服务端一直sleep,客户端不断发送数据产生的问题
- 使用AIDL实现IPC通信之——实现服务端主动发送数据给客户端