package com.example.double2.sockettesttwo;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
public class MainActivity extends AppCompatActivity {
private EditText etMain;
private Button btnMain;
private TextView tvMain;
private ClientThread mClientThread;
//在主线程中定义Handler传入子线程用于更新TextView
private Handler mHandler;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
etMain = (EditText) findViewById(R.id.et_main);
btnMain = (Button) findViewById(R.id.btn_main);
tvMain = (TextView) findViewById(R.id.tv_main);
mHandler=new Handler() {
@Override
public void handleMessage(Message msg) {
if (msg.what == 0) {
tvMain.append("\n" + msg.obj.toString());
}
}
};
//点击button时,获取EditText中string并且调用子线程的Handler发送到服务器
btnMain.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
try {
Message msg = new Message();
msg.what = 1;
msg.obj = etMain.getText().toString();
mClientThread.revHandler.sendMessage(msg);
etMain.setText("");
} catch (Exception e) {
e.printStackTrace();
}
}
});
mClientThread = new ClientThread(mHandler);
new Thread(mClientThread).start();
}
}
package com.example.double2.sockettesttwo;
import android.os.Handler;
import android.os.Looper;
import android.os.Message;
import android.util.Log;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.net.Socket;
/**
* 项目名称:SocketTestTwo
* 创建人:Double2号
* 创建时间:2016.11.20 9:16
* 修改备注:
*/
public class ClientThread implements Runnable {
private Socket mSocket;
private BufferedReader mBufferedReader = null;
private OutputStream mOutputStream = null;
private Handler mHandler;
public Handler revHandler;
public ClientThread(Handler handler) {
mHandler = handler;
}
@Override
public void run() {
try {
mSocket = new Socket("10.3.20.159", 30003);
Log.d("xjj","connect success");
mBufferedReader = new BufferedReader(new InputStreamReader(mSocket.getInputStream()));
mOutputStream = mSocket.getOutputStream();
new Thread(){
@Override
public void run() {
super.run();
try {
String content = null;
while ((content = mBufferedReader.readLine()) != null) {
Log.d("xjj",content);
Message msg = new Message();
msg.what = 0;
msg.obj = content;
mHandler.sendMessage(msg);
}
}catch (IOException e){
e.printStackTrace();
}
}
}.start();
//由于子线程中没有默认初始化Looper,要在子线程中创建Handler,需要自己写
Looper.prepare();
revHandler = new Handler() {
@Override
public void handleMessage(Message msg) {
if (msg.what == 1) {
try {
mOutputStream.write((msg.obj.toString() + "\r\n").getBytes("utf-8"));
} catch (IOException e) {
e.printStackTrace();
}
}
}
};
Looper.loop();
} catch (IOException e) {
e.printStackTrace();
Log.d("xjj","");
}
}
}
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/activity_main" android:layout_width="match_parent" android:layout_height="match_parent" android:padding="@dimen/activity_vertical_margin" android:orientation="vertical" > <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="horizontal"> <EditText android:id="@+id/et_main" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1"/> <Button android:id="@+id/btn_main" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/send"/> </LinearLayout> <TextView android:id="@+id/tv_main" android:layout_width="match_parent" android:layout_height="match_parent" /> </LinearLayout>
import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.ArrayList;
public class MySever {
public static ArrayList<Socket> socketList = new ArrayList<Socket>();
public static String content="";
public static void main(String[] args) throws IOException {
//建立ServerSocket
ServerSocket ss = new ServerSocket(30003);
//不断接收此端口的socket,并存储到socketList中
//并且为每一个socket开启一个线程,用于接收信息
while (true) {
Socket s = ss.accept();
System.out.println("connect success!");
socketList.add(s);
new Thread(new ServerThread(s)).start();
}
}
}
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.UnsupportedEncodingException;
import java.net.Socket;
import java.net.SocketException;
import java.util.Iterator;
public class ServerThread implements Runnable {
private Socket mSocket = null;
private BufferedReader mBufferedReader = null;
// 构造函数中接收socket并且初始化BufferedReader
public ServerThread(Socket socket)
throws UnsupportedEncodingException, IOException {
mSocket = socket;
mBufferedReader = new BufferedReader(
new InputStreamReader(mSocket.getInputStream(), "utf-8"));
}
@Override
public void run() {
// TODO Auto-generated method stub
try {
String content = null;
//循环接收来自此客户端的消息
//如果接收不到了,表面已经断开,就将此客户端从socketList中移除
while ((content = mBufferedReader.readLine()) != null) {
System.out.println(content);
//向连接中的每个客户端发送数据
//如果异常,说明断开,就将该条目从socketList中移除
for (Iterator<Socket> it = MySever.socketList.iterator();
it.hasNext();) {
Socket s = it.next();
try {
OutputStream os = s.getOutputStream();
os.write((content + "\n").getBytes("utf-8"));
} catch (SocketException e) {
e.printStackTrace();
it.remove();
}
}
}
} catch (IOException e) {
e.printStackTrace();
MySever.socketList.remove(mSocket);
}
}
}
机械节能产品生产企业官网模板...
大气智能家居家具装修装饰类企业通用网站模板...
礼品公司网站模板
宽屏简约大气婚纱摄影影楼模板...
蓝白WAP手机综合医院类整站源码(独立后台)...苏ICP备2024110244号-2 苏公网安备32050702011978号 增值电信业务经营许可证编号:苏B2-20251499 | Copyright 2018 - 2025 源码网商城 (www.ymwmall.com) 版权所有