android tcp/ip server接多个client
来源:互联网 发布:ugui scrollview优化 编辑:程序博客网 时间:2024/05/21 19:49
网上找了个例子改了下,测试几个点没有问题,太多的话,没有测试过,如有高手,请指教
DEMO:http://download.csdn.net/detail/small5e4444/9057981
一共做了三个类:
1、是TestTcpServer_activity 就是个普通的activity,做个按钮启动server;
2、Server 负责启动server,并且启动线程,在线程里 socket = server.accept();等待client;收到client后,把client存在list中,再new Runnable,去处理每个client;
3、ServerThread实现接口Runnable,去处理每个client
server端:
1、
import com.socket.Server;
public class TestTcpServer_activity extends Activity {
/** Called when the activity is first created. */
private EditText porText;
private Server server;
private TextView prinText;
private String String1;
private Button btnStr,btnStop,btnAg;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.tcp_server);
// TODO Auto-generated method stub
porText = (EditText)findViewById(R.id.serverPort);
prinText = (TextView)findViewById(R.id.serverDisplay);
btnStr = (Button)findViewById(R.id.btnStart);
btnStop = (Button)findViewById(R.id.btnstop);
btnAg = (Button)findViewById(R.id.btnAg);
setTitle(Info.getLocalHostIp());
prinText.setOnLongClickListener(new OnLongClickListener() {
@Override
public boolean onLongClick(View v) {
// TODO Auto-generated method stub
String1 = "";
prinText.setText(String1);
return true;
}
});
}
Handler _handler = new Handler() {
public void handleMessage(Message msg) {
super.handleMessage(msg);
// 刷新信息
try {
// 输出接受到的数据(更新控件)
if (String1 == null) {
String1 = msg.getData().getString("msg");
}
else {
String1 += msg.getData().getString("msg");
}
prinText.setText(String1);
} catch (Exception e) {
}
}
};
public void onStartServerClicked(View view) {
String port = porText.getText().toString();
if (!port.equals("")) {
System.out.println("点击");
server = new Server(_handler, 5001);//我把端口写死了;_handler是显示值用的
server.StartServer();
btnStr.setEnabled(false);
btnStop.setEnabled(true);
btnAg.setEnabled(true);
porText.setEnabled(false);
}else {
Toast.makeText(getApplicationContext(), "请输入监听端口号", Toast.LENGTH_SHORT).show();
}
}
public void onStopServerClicked(View view) {
server.StopServer();
server = null;
btnStr.setEnabled(true);
btnAg.setEnabled(false);
btnStop.setEnabled(false);
porText.setEnabled(true);
}
}
2、
public class Server {
// 定义保存所有Socket的ArrayList
public static ArrayList<Socket>socketList= new ArrayList<Socket>();
private ServerSocket server = null;
private Handler handlerDis;
private Socket socket = null;
public Server(Handler handler,int port) {
handlerDis = handler;
try {
System.out.println("进"+port);
server = new ServerSocket(port);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
Sendmsg("服务器启动出错" + "\n");
}
}
/**
* 监听客户端
*/
private Thread StartListen = new Thread()
{
public void run()
{
while(true){
try{
socket = server.accept();
Sendmsg("客户端加入:ip" + socket.getInetAddress()+ "/" + socket.getPort() +"\n");
socketList.add(socket);
new Thread(new ServerThread(socket)).start();
}catch(IOException e){
e.printStackTrace();
}
}
}
};
//开启服务器
public void StartServer()
{
StartListen.start();
Sendmsg("服务器已启动,开始监听...." + "\n");
}
//关闭服务器
public void StopServer()
{
try {
server.close();
Sendmsg("服务器已关闭" + "\n");
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
3、
public class ServerThread implements Runnable{
private InputStream in;
private OutputStream os;// = _socket_2.getOutputStream();
// 定义当前线程所处理的Socket
Socket s =null;
public ServerThread(Socket s)
throws IOException{
this.s = s;
in = s.getInputStream();
os=s.getOutputStream();
}
public void run(){
String hex="";
byte[] buffer;
while(true){
try {
buffer = new byte[in.available()];
if(in.read(buffer)>0){
System.out.println("fengsidai----"+buffer.length);
for (int i = 0; i < buffer.length; i++) {
hex = Integer.toHexString(buffer[i] & 0xFF);
if (hex.length() == 1) {
hex='0' + hex;
}
System.out.println("fsd···········"+hex);//这个可以把16进制接收上来的数据,以16进制形式在String中表现
}
System.out.println(s.getInetAddress().toString());
System.out.println(s.getInetAddress().toString()=="/192.168.2.151");
System.out.println(s.getInetAddress().toString().equals("/192.168.2.151"));
if(s.getInetAddress().toString().equals("/192.168.2.151")){//发送数据给发来数据的客户端
byte[] c=new byte[]{0x01,0x02,0x03};
os.write(c);
os.flush();
}
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
/**
*
*/
public static String bytesToHexString(byte[] src){
StringBuilder stringBuilder = new StringBuilder("");
if (src == null || src.length <= 0) {
return null;
}
for (int i = 0; i < src.length; i++) {
int v = src[i] & 0xFF;
String hv = Integer.toHexString(v);
if (hv.length() < 2) {
stringBuilder.append(0);
}
stringBuilder.append(hv);
}
return stringBuilder.toString();
}
}
- android tcp/ip server接多个client
- 实现基于TCP/IP协议的简单Client/Server程序
- TCP/IP(7)-TCP Server与TCP Client(linux套接字)
- java Tcp Client server
- linux tcp server client
- TCP:Server-Client程序
- ECHO TCP Server Client
- gevent tcp server&client
- TCP Server/Client, Select
- TCP Socket Server Client
- tcp client and server
- golang tcp server client
- TCP/IP编程·Client
- UNP: Chatper5-TCP Server Client
- 简单 TCP UDP server client
- Tcp Client与Server 基本原理
- 5-TCP Client&Server Example
- Qt中Tcp:Server、Client
- Activiti工作流入门实例(二)
- maven pom.xml文件教程详解
- iOS开发之多线程(NSThread创建线程)
- Hadoop集群搭建之搭建DNS
- 网上常用免费WebServices集合
- android tcp/ip server接多个client
- xcode error:no such file or directory prefix.pch
- hibernate的一些异常原因及解决方法
- ASP.NET访问网络驱动器(映射磁盘)
- git常用命令
- 感知器
- iOS 本地推送 (本地通知)
- 异步GET请求方法
- 黑马程序员-----Java基础-----正则表达式