안 드 로 이 드 는 간단 한 C/S 채 팅 방 응용 을 실현 합 니 다.
서버 쪽:두 종류 제공
ServerSocket 감청 의 주 클래스 만 들 기:MyServer.java
모든 Socket 통신 을 처리 하 는 스 레 드 클래스:ServerThread.자바
클 라 이언 트:Android 응용 프로그램 입 니 다.
==>MultiThreadClient
인터페이스 에서 두 텍스트 상자 와 보 내기 단 추 를 제공 합 니 다.
Activity 는 Handler 를 통 해 하위 스 레 드 에서 온 메 시 지 를 처리 합 니 다.
클 라 이언 트 는 네트워크 에서 온 데 이 터 를 읽 는 하위 스 레 드 가 필요 합 니 다.
프로젝트 효과:
 서버 쪽 코드:
MyServer.java
import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.ArrayList;
 
 
public class MyServer
{
 //      Socket ArrayList
 public static ArrayList<Socket> socketList 
 = new ArrayList<Socket>();
  public static void main(String[] args) 
 throws IOException
  {
    ServerSocket ss = new ServerSocket(8000);
 while(true)
 {
  //       ,          
  Socket s = ss.accept();
  socketList.add(s);
  //            ServerThread         
  new Thread(new ServerThread(s)).start();
}ServerThrad.java
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.net.Socket;
 
 
 
//              
public class ServerThread implements Runnable 
{
 //          Socket
 Socket s = null;
 //       Socket       
 BufferedReader br = null;
 public ServerThread(Socket s)
 throws IOException
 {
 this.s = s;
 //    Socket      
 br = new BufferedReader(new InputStreamReader(
  s.getInputStream() , "utf-8"));  //②
 }
 public void run()
 {
 try
 {
  String content = null;
  //       Socket             
  while ((content = readFromClient()) != null)
  {
  //  socketList    Socket,
  //         Socket    
  for (Socket s : MyServer.socketList)
  {
   OutputStream os = s.getOutputStream();
   os.write((content + "
").getBytes("utf-8"));
  }
  }
 }
 catch (IOException e)
 {
  e.printStackTrace();
 }
 }
 //            
 private String readFromClient()
 {
 try
 {
  return br.readLine(); 
 }
 //       ,   Socket          
 catch (IOException e)
 {
  //   Socket。
  MyServer.socketList.remove(s);  //①
 }
 return null;
 }
}클 라 이언 트 코드:레이아웃 파일:main.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
 android:orientation="vertical"
 android:layout_width="fill_parent"
 android:layout_height="fill_parent"
 >
<LinearLayout 
 android:orientation="horizontal"
 android:layout_width="fill_parent"
 android:layout_height="wrap_content"
 >
<!--        ,           -->
<EditText
 android:id="@+id/input" 
 android:layout_width="240px" 
 android:layout_height="wrap_content" 
 />
<Button
 android:id="@+id/send" 
 android:layout_width="fill_parent" 
 android:layout_height="wrap_content" 
 android:paddingLeft="8px"
 android:text="@string/send"
 />
</LinearLayout>
<!--        ,              -->
<EditText
 android:id="@+id/show" 
 android:layout_width="fill_parent" 
 android:layout_height="fill_parent" 
 android:gravity="top"
 android:editable="false" 
 android:cursorVisible="false" 
 />
</LinearLayout>Activity 파일:MultiThreadClient.java
package org.wwj.net;
 
import java.io.OutputStream;
import java.net.Socket;
 
import android.app.Activity;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
 
public class MultiThreadClient extends Activity
{
 //            
 EditText input, show;
 //           
 Button send;
 OutputStream os;
 Handler handler;
 
 @Override
 public void onCreate(Bundle savedInstanceState)
 {
 super.onCreate(savedInstanceState);
 setContentView(R.layout.main);
 input = (EditText) findViewById(R.id.input);
 send = (Button) findViewById(R.id.send);
 show = (EditText) findViewById(R.id.show);
 Socket s;
 handler = new Handler()
 {
  @Override
  public void handleMessage(Message msg)
  {
  //           
  if (msg.what == 0x123)
  {
   //                
   show.append("
" + msg.obj.toString());
  }
  }
 };
 try
 {
  s = new Socket("183.30.181.228 ", 8000);
  //      ClientThread              
  new Thread(new ClientThread(s, handler)).start(); // ①
  os = s.getOutputStream();
 }
 catch (Exception e)
 {
  e.printStackTrace();
 }
 send.setOnClickListener(new OnClickListener()
 {
  @Override
  public void onClick(View v)
  {
  try
  {
   //                  
   os.write((input.getText().toString() + "\r
")
   .getBytes("utf-8"));
   //   input   
   input.setText("");
  }
  catch (Exception e)
  {
   e.printStackTrace();
  }
  }
 });
 }
}하위 스 레 드 클래스:Client Thread.java
package org.wwj.net;
 
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.Socket;
 
import android.os.Handler;
import android.os.Message;
 
public class ClientThread implements Runnable
{
 //        Socket
 private Socket s;
 private Handler handler;
 //       Socket       
 BufferedReader br = null;
 public ClientThread(Socket s , Handler handler)
 throws IOException
 {
 this.s = s;
 this.handler = handler;
 br = new BufferedReader(
  new InputStreamReader(s.getInputStream()));
 }
 public void run()
 {
 try
 {
  String content = null;
  //    Socket       。
  while ((content = br.readLine()) != null)
  {
  //               ,               
  Message msg = new Message();
  msg.what = 0x123;
  msg.obj = content;
  handler.sendMessage(msg);
  }
 }
 catch (Exception e)
 {
  e.printStackTrace();
 }
 }
}이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.
                이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Bitrise에서 배포 어플리케이션 설정 테스트하기이 글은 Bitrise 광고 달력의 23일째 글입니다. 자체 또는 당사 등에서 Bitrise 구축 서비스를 사용합니다. 그나저나 며칠 전 Bitrise User Group Meetup #3에서 아래 슬라이드를 발표했...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.