Android(安卓)Socket网络通信
16lz
2022-06-15
1.服务器程序:
Java代码
2.客户端程序:
添加 android.permission.INTERNET
Java代码
Java代码
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.客户端程序:
添加 android.permission.INTERNET
Java代码
- 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);
- }
- };
- }
Java代码
- <?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亮屏、暗屏、解锁、关闭系统对话的监听事件
- SharedPreferences 源码分析
- Android中开关按钮IOS效果的实现
- Android(安卓)监听网络变化然后刷新页面
- Android(安卓)studio爬取网页
- Android的线程使用来更新UI----Thread、Handler、Looper、TimerT
- eclipse中Android布局的基本操作
- Android异步消息处理机制完全解析-Handler详解
- Android中Handler Runnable与Thread的区别详解