Android(安卓)Socket网络通信
16lz
2022-01-27
1.服务器程序:
Java代码- package com;
- 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.ServerSocket;
- import java.net.Socket;
- import java.util.ArrayList;
- import java.util.List;
- import java.util.concurrent.ExecutorService;
- import java.util.concurrent.Executors;
- /**
- *comServer
- *
- *@authorAina.huangE-mail:674023920@qq.com
- *@version创建时间:2010Jul14,201010:45:35AM类说明
- */
- public class Main{
- private static final int PORT= 9999 ; //端口监听
- private List<Socket>mList= new ArrayList<Socket>(); //存放客户端socket
- private ServerSocketserver= null ;
- private ExecutorServicemExecutorService= null ; //线程池
- /**
- *@paramargs
- */
- public static void main(String[]args){
- //TODOAuto-generatedmethodstub
- new Main();
- }
- public Main(){
- try {
- server=new ServerSocket(PORT);
- mExecutorService=Executors.newCachedThreadPool();//创建一个线程池
- System.out.println("ServerStart..." );
- Socketclient=null ;
- while ( true ){
- client=server.accept();
- mList.add(client);
- mExecutorService.execute(new Service(client)); //开启一个客户端线程.
- }
- }catch (Exceptionex){
- ex.printStackTrace();
- }
- }
- public class Service implements Runnable{
- private Socketsocket;
- private BufferedReaderin= null ;
- private Stringmsg= "" ;
- public Service(Socketsocket){
- this .socket=socket;
- try {
- in=new BufferedReader( new InputStreamReader(socket
- .getInputStream()));
- msg="user:" + this .socket.getInetAddress()+ "cometotal:"
- +mList.size();
- this .sendmsg();
- }catch (IOExceptione){
- e.printStackTrace();
- }
- }
- public void run(){
- //TODOAuto-generatedmethodstub
- try {
- while ( true ){
- if ((msg=in.readLine())!= null ){
- if (msg.equals( "exit" )){
- System.out.println("sssssssssss" );
- mList.remove(socket);
- in.close();
- msg="user:" +socket.getInetAddress()
- +"exittotal:" +mList.size();
- socket.close();
- this .sendmsg();
- break ;
- }else {
- msg=socket.getInetAddress()+":" +msg;
- this .sendmsg();
- }
- }
- }
- }catch (Exceptionex){
- System.out.println("server读取数据异常" );
- ex.printStackTrace();
- }
- }
- /**
- *发送消息给所有客户端
- */
- public void sendmsg(){
- System.out.println(msg);
- int num=mList.size();
- for ( int i= 0 ;i<num;i++){
- SocketmSocket=mList.get(i);
- PrintWriterpout=null ;
- try {
- pout=new PrintWriter( new BufferedWriter(
- new OutputStreamWriter(mSocket.getOutputStream())),
- true );
- pout.println(msg);
- }catch (IOExceptione){
- e.printStackTrace();
- }
- }
- }
- }
- }
2.客户端程序:
- package com.Aina.Android;
- import java.io.BufferedReader;
- import java.io.BufferedWriter;
- import java.io.InputStreamReader;
- import java.io.OutputStreamWriter;
- import java.io.PrintWriter;
- import java.net.Socket;
- import android.app.Activity;
- import android.app.AlertDialog;
- import android.content.DialogInterface;
- import android.os.Bundle;
- import android.os.Handler;
- import android.os.Message;
- import android.util.Log;
- import android.view.View;
- import android.widget.Button;
- import android.widget.EditText;
- import android.widget.TextView;
- public class Test extends Activity implements Runnable{
- /**Calledwhentheactivityisfirstcreated.*/
- private TextViewtv_msg= null ;
- private EditTexted_msg= null ;
- private Buttonbtn_send= null ;
- private Buttonbtn_login= null ;
- private static final StringHOST= "192.168.0.132" ;
- private static final int PORT= 9999 ;
- private Socketsocket= null ;
- private BufferedReaderin= null ;
- private PrintWriterout= null ;
- private Stringcontent= "" ;
- @Override
- public void onCreate(BundlesavedInstanceState){
- super .onCreate(savedInstanceState);
- setContentView(R.layout.main);
- tv_msg=(TextView)this .findViewById(R.id.TextView);
- ed_msg=(EditText)this .findViewById(R.id.EditText01);
- btn_login=(Button)this .findViewById(R.id.Button01);
- btn_send=(Button)this .findViewById(R.id.Button02);
- try {
- socket=new Socket(HOST,PORT);
- in=new BufferedReader( new InputStreamReader(socket
- .getInputStream()));
- out=new PrintWriter( new BufferedWriter(
- new OutputStreamWriter(socket.getOutputStream())),
- true );
- }catch (Exceptionex){
- ex.printStackTrace();
- ShowDialog("登陆异常:" +ex.getMessage());
- }
- btn_send.setOnClickListener(new Button.OnClickListener(){
- public void onClick(Viewv){
- //TODOAuto-generatedmethodstub
- Stringmsg=ed_msg.getText().toString();
- if (socket.isConnected()){
- if (!socket.isOutputShutdown()){
- out.println(msg);
- }
- }
- }
- });
- new Thread( this ).start();
- }
- public void ShowDialog(Stringmsg){
- new AlertDialog.Builder( this ).setTitle( "提示" ).setMessage(msg)
- .setPositiveButton("OK" , new DialogInterface.OnClickListener(){
- public void onClick(DialogInterfacedialog, int which){
- //TODOAuto-generatedmethodstub
- }
- }).show();
- }
- public void run(){
- try {
- while ( true ){
- if (socket.isConnected()){
- if (!socket.isInputShutdown()){
- if ((content=in.readLine())!= null ){
- Log.i("TAG" , "++" +content);
- content+="\n" ;
- mHandler.sendMessage(mHandler.obtainMessage());
- }else {
- }
- }
- }
- }
- }catch (Exceptionex){
- ex.printStackTrace();
- }
- }
- public HandlermHandler= new Handler(){
- public void handleMessage(Messagemsg){
- super .handleMessage(msg);
- Log.i("TAG" , "--" +msg);
- tv_msg.setText(tv_msg.getText().toString()+content);
- }
- };
- }
- <?xmlversion= "1.0" encoding= "utf-8" ?>
- <LinearLayoutxmlns:android="http://schemas.android.com/apk/res/android"
- android:orientation="vertical" android:layout_width= "fill_parent"
- android:layout_height="fill_parent" >
- <TextViewandroid:id="@+id/TextView" android:singleLine= "false"
- android:layout_width="fill_parent"
- android:layout_height="wrap_content" />
- <EditTextandroid:hint="content" android:id= "@+id/EditText01"
- android:layout_width="fill_parent"
- android:layout_height="wrap_content" >
- </EditText>
- <Buttonandroid:text="login" android:id= "@+id/Button01"
- android:layout_width="fill_parent"
- android:layout_height="wrap_content" >
- </Button>
- <Buttonandroid:text="send" android:id= "@+id/Button02"
- android:layout_width="fill_parent"
- android:layout_height="wrap_content" >
- </Button>
- </LinearLayout>
更多相关文章
- android中view组件使用详解
- Android使用View类动画
- android 的Handler处理UI主线程外的耗时操作
- Android(安卓)Intent列表
- Android代码混淆官方实现方法
- Android腾讯微薄客户端开发十三:提及篇(与我有关的微博)
- 彻底解决Android中文乱码
- 【Android】TabHost与RadioGroup结合完成的菜单
- android中如何利用线程循环打印