안 드 로 이 드 는 간단 한 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에 따라 라이센스가 부여됩니다.