안 드 로 이 드 는 간단 한 C/S 채 팅 방 응용 을 실현 합 니 다.

7307 단어 Android채 팅 방
Android 의 네트워크 응용 프로그램:간단 한 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();
 }
 }
}
이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.

좋은 웹페이지 즐겨찾기