`
busuanzi
  • 浏览: 143861 次
  • 性别: Icon_minigender_1
社区版块
存档分类
最新评论

java Android socket 多线程 总结

阅读更多
今天做了一个多线程的例子,多个Android手机和电脑通信。

首先要说的时候 我的一个理解误区,也是我最大的收获。

先说一下socket,比如

while(true){
     Socket sc=ServerSocker.accept();
}


我一直以为这个阻塞是自己的while循环产生的,后来差资料发现,accept()方法自己产生阻塞,
也就说 进入while循环以后,代码会停在 Socket sc=ServerSocker.accept();这一行,知道有链接请求,才会进入下一个循环,继续等待连接,在那里阻塞。 这个while 循环是为了多个客户端链接,每一个链接都会得到一个Socket实例,用这个实例与客户端通讯,
这就需要自己开辟进程,进行处理了。语文学的不好,贴出代码来

java程序
package com.bh;

import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;

public class Server{

	/**
	 * @param args
	 */
	int i=0;
	private static ServerSocket mServerSocker;
	private static Socket sc;
//	private static BufferedReader in;
//	private static PrintWriter out;
	public static void main(String[] args) throws IOException {
		
		mServerSocker=new ServerSocket(8888);
		while(true){
			sc=mServerSocker.accept();
			System.out.println("aaaaaaaa");
			//Server s=new Server();
			Thread r=new ReciveThreat(sc);
			r.start();
			Thread s=new SendThread(sc); 
			s.start();
			System.out.println("kaishi");
			//my.run();
			
			//new Server().run();
		}
		//out=new PrintWriter(new BufferedWriter(new OutputStreamWriter(sc.getOutputStream())),true);
	}	
}


send类
package com.bh;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.net.Socket;

public class SendThread extends Thread{
	private Socket sc;
	int i=0;
	//private BufferedReader in;
	private PrintWriter out;
	public SendThread(Socket s) throws IOException {
		sc=s;
		//in=new BufferedReader(new InputStreamReader(sc.getInputStream()));
		out=new PrintWriter(new BufferedWriter(new OutputStreamWriter(sc.getOutputStream())),true);
		//System.out.println("ok");
	}
	@Override
	public void run() {
		// TODO Auto-generated method stub
		try {
			while(true){
				Thread.sleep(3000);
				System.out.println("aa");
				out.println(i++);
			}
		} catch (InterruptedException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
	}

}



recive类

package com.bh;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.net.Socket;

public class ReciveThreat extends Thread{
	private Socket sc;
	private BufferedReader in;
	//private PrintWriter out;
	public ReciveThreat(Socket s) throws IOException {
		sc=s;
		in=new BufferedReader(new InputStreamReader(sc.getInputStream()));
		//out=new PrintWriter(new BufferedWriter(new OutputStreamWriter(sc.getOutputStream())),true);
	}
	@Override
	public void run() {
		while(true){
			try {
				String str;
				str = in.readLine();
				if(str!=null){
					System.out.println("read:"+str);
					System.out.println("run......");
				}
			} catch (IOException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
	}
	
}


Android程序
package com.bh.test;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.net.Socket;
import java.net.UnknownHostException;

import android.app.Activity;
import android.os.Bundle;
import android.os.Handler;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;

public class Main extends Activity implements Runnable{
    /** Called when the activity is first created. */
	EditText et;
	String recive;
	Socket s;
	TextView t;
	PrintWriter out;
	BufferedReader in;
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        et=(EditText) findViewById(R.id.edittext);
        Button b=(Button) findViewById(R.id.send);
        t=(TextView) findViewById(R.id.showtext);
		try {
			s = new Socket("10.0.2.2",8888);
			out=new PrintWriter(new BufferedWriter(new OutputStreamWriter(s.getOutputStream())),true);
			in=new BufferedReader(new InputStreamReader(s.getInputStream()));
		} catch (UnknownHostException e1) {
			// TODO Auto-generated catch block
			e1.printStackTrace();
		} catch (IOException e1) {
			// TODO Auto-generated catch block
			e1.printStackTrace();
		} 
		
		new Thread(this).start();
        b.setOnClickListener(new OnClickListener() {
			
			@Override
			public void onClick(View v) {
				// TODO Auto-generated method stub
				
						String aa=et.getText().toString();
						out.println(aa);
						//s.close();
						Log.d("aaaaaaa", "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa");
			}
		});
    }
    public Handler handler = new Handler(){
    	public void handleMessage(android.os.Message msg) {
    		switch (msg.what) {
			case 1:
				t.setText(recive);
				break;

			default:
				break;
			}
    		
    	};
	};
	@Override
	public void run() {
		while(true){
			try {
				//String str;
				recive = in.readLine();
				Log.d("aaaaa",recive);
				if(recive!=null){
					//t.setText(recive);
					handler.sendEmptyMessage(1);
				}
			} catch (IOException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
	}
}



有错误 大家指出了 谢谢哈
分享到:
评论
2 楼 plmmmmlq 2014-07-23  
应该没有吧,要不第一段代码就一行有用的,都错了。ServerSocker。错别字就不说了。
1 楼 luyunhan 2012-02-18  
不知道楼主调试过没有,我在Android3.0的xoom上运行的时候强制关闭了。问题应该出现在客户端得39行上面。

相关推荐

    Android与PC机 Socket 多线程通信经典案例,移动开发必备代码

    以下是关于Android与PC机Socket多线程通信的关键知识点: 1. **Socket基础**:Socket是网络通信中的一个概念,它代表了两台机器间的一个连接端点,允许数据在网络中传输。在Java中,Socket类和ServerSocket类提供了...

    android socket局域网文件传输131114

    本项目"android socket局域网文件传输131114"是针对这一需求实现的一个示例,它利用了Socket、多线程以及ListView等Android核心组件,旨在提供一种高效、稳定、用户友好的文件共享解决方案。 首先,Socket作为TCP/...

    javaandroidsocket编程.pdf

    Java Android Socket 编程是Android应用开发中用于实现设备间通信的重要技术,它基于TCP...开发者在实际应用中需要根据具体需求,考虑如何处理数据传输、错误恢复、多线程和安全问题等,以实现稳定、高效且安全的通信。

    多线程与Socket联合使用案例源码

    在Java或其他支持多线程的编程语言中,多线程允许程序同时执行多个任务。这样可以提高应用程序的效率和响应性,特别是在处理I/O操作或并发用户请求时。在服务器端,多线程技术常用于处理来自多个客户端的并发连接,...

    Android-Lemon一个简单轻量级的AndroidSocket框架

    总结来说,`Android-Lemon`作为一个轻量级的Android Socket框架,大大简化了开发者在Android平台上进行Socket通信的工作,提高了开发效率。其易用性和灵活性使得它成为Android网络编程中值得推荐的工具。通过理解其...

    Android socket通信聊天,客户端+服务端

    总结来说,Android中的Socket通信涉及网络编程、多线程、数据处理等多个方面,需要综合运用Java和Android的相关知识。理解并熟练掌握Socket通信,对于开发实时交互的应用,如聊天、游戏等,至关重要。通过实践和不断...

    Android-Socket长连接通信心跳包消息回调Java服务端

    总结,实现“Android-Socket长连接通信心跳包消息回调Java服务端”涉及了网络编程的多个关键点,包括Socket的创建和管理、心跳包的设计和处理、消息的异步回调以及服务端的并发处理。通过理论学习和实际项目的实践,...

    android socket通信实例程序

    在实际应用中,我们还需要考虑异常处理、多线程处理并发连接等问题。同时,Android有权限管理,所以在AndroidManifest.xml中需要添加Internet权限: ```xml <uses-permission android:name="android.permission....

    Android Socket 服务端实现

    在Android平台上,Socket服务端的实现是通过Java的Socket编程...总之,Android Socket服务端的实现涉及网络编程基础、多线程处理、服务生命周期管理等多个方面,理解和掌握这些知识点对于构建实时通信的应用至关重要。

    安卓app之间的socket通信,支持多线程

    3. **创建Socket客户端(AndroidSocket)** - 客户端也需要创建Socket对象,通过调用Socket类的构造函数,指定服务器的IP地址和端口号来建立连接。 - 连接建立后,同样使用Socket的InputStream和OutputStream进行...

    android socket和.net

    实际应用中可能需要考虑异常处理、数据编码解码、多线程等问题,以确保通信的稳定性和安全性。同时,为了优化性能,可以考虑使用异步编程模型,如.NET中的async/await关键字,以及Android的AsyncTask或Handler机制。...

    Android socket即时通信

    总之,"Android socket即时通信"是一个涵盖了网络编程、多线程、异步处理等核心概念的实际应用案例,对于Android开发者来说,理解和掌握这一技术对于开发实时通信应用至关重要。通过分析提供的源代码和实践操作,...

    android socket 服务器端

    总之,Android Socket服务器端开发涉及到Java网络编程、多线程、权限管理等多个方面,对于实现设备间的实时通信有着重要作用。通过上述步骤,你可以创建一个基础的Android Socket服务器,然后根据具体需求扩展功能,...

    java socket 聊天

    4. **多线程处理**: - 当多个客户端同时连接服务器时,为了不让服务器阻塞在`accept()`方法,通常会为每个连接创建一个新的线程来处理。这样,服务器可以同时处理多个客户端的请求,提高并发性能。 5. **断开连接...

    android Socket文件传输

    总之,Android的Socket文件传输涉及网络编程、文件操作和多线程等技术,通过合理的优化策略,即使是大文件也能流畅地进行传输。在实际项目中,开发者需要根据需求进行定制,以满足特定的性能和安全要求。

    android socket实时传输到服务端

    总结来说,实现"android socket实时传输到服务端"需要掌握以下关键技术: 1. Android的Camera API,用于访问和控制摄像头。 2. Java Socket编程,建立客户端和服务器之间的通信。 3. MediaCodec API,进行视频编码以...

    android使用socket上传、下载文件

    在Android平台上,Socket通信是一种常见的网络编程方式,用于设备间的双向数据传输。Socket提供了一种可靠的、基于连接的...实际开发中,可能还需要考虑多线程处理、断点续传、进度显示等功能,以提供更好的用户体验。

    Android Socket编程客户端服务器端源码

    在Android中,我们通常使用java.net.Socket类来创建和管理Socket。Socket基于TCP/IP协议,确保数据的可靠传输,通过IP地址和端口号定位到网络上的特定进程。 二、Android Socket客户端 1. 创建Socket对象:客户端...

    android Socket通信源代码

    总结来说,这个“android Socket通信源代码”项目为初学者提供了Android平台下使用Socket进行客户端-服务器通信的基础示例,涵盖了Socket通信的基本概念和操作。通过学习和实践,开发者能够掌握Android网络编程的...

    Android基于Socket聊天最终版

    总的来说,这个项目涵盖了Android应用开发中的多个关键知识点,如Socket通信、多线程、数据库操作和UI设计。开发者通过实现这个项目,不仅掌握了网络编程的基本原理,还锻炼了在Android平台上构建实际应用的能力。

Global site tag (gtag.js) - Google Analytics