Android 에서 Socket 의 응용 분석
Android 가 제공 하 는 자주 사용 하 는 네트워크 프로 그래 밍 은 TCP/IP 프로 토 콜 에 대한 Socket 통신 을 포함한다.Socket 은 크로스 플랫폼 의 프로 그래 밍 방식 으로 이 구 언어 간 에 통신 할 수 있다.
Socket 프로그램의 개발 원 리 는 서버 와 클 라 이언 트 를 실현 하 는 것 입 니 다.
서버 는 ServerSocket 감청 이 지정 한 포트 를 사용 합 니 다.포트 는 임의로 지정 할 수 있 습 니 다(1024 이하 의 포트 는 보통 보존 포트 에 속 하기 때문에 일부 운영 체제 에서 마음대로 사용 할 수 없 기 때문에 1024 이상 의 포트 를 사용 하 는 것 을 권장 합 니 다).고객 의 연결 요청 을 기다 리 고 사용자 가 연결 한 후에 세 션 이 발생 합 니 다.세 션 이 끝 난 후 연결 을 닫 습 니 다.
클 라 이언 트,Socket 을 사용 하여 네트워크 의 한 서버 의 한 포트 에 연결 요청 을 하고 연결 이 성공 하면 세 션 을 엽 니 다.세 션 이 끝 난 후 Socket 을 닫 습 니 다.클 라 이언 트 는 열 린 포트 를 지정 할 필요 가 없습니다.보통 임시 적 이 고 동적 으로 1024 이상 의 포트 를 분배 합 니 다.
다음은 socket 을 실현 하 는 예 입 니 다.
서버 쪽 코드:
package com.socket;
import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;
/**
* com Server
*/
public class Main {
private int ServerPort = 9999;
private ServerSocket serversocket = null;
private OutputStream outputStream = null;
private InputStream inputStream = null;
private PrintWriter printWinter = null;
private Socket socket = null;
private BufferedReader reader = null;
public Main(){
try{
serversocket = new ServerSocket(ServerPort);
System.out.println(" 。。。");
socket = serversocket.accept();
System.out.println(" ");
}catch(Exception ex){
ex.printStackTrace();
}
try{
outputStream= socket.getOutputStream();
inputStream = socket.getInputStream();
printWinter = new PrintWriter(outputStream,true);
reader = new BufferedReader(new InputStreamReader(inputStream));
BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
while (true){
String message = reader.readLine();
System.out.println("client:"+message);
if(message.equals("bye")||message.equals("Bye")){
break;
}
message = in.readLine();
printWinter.println(message);
}
outputStream.close();
inputStream.close();
socket.close();
serversocket.close();
System.out.print("Client is disconnected");
}catch(Exception e){
e.printStackTrace();
}finally{
}
}
public static void main(String[] args){
new Main();
}
}
고객 센터 코드:
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 {
/** Called when the activity is first created. */
private TextView tv_msg = null;
private EditText ed_msg = null;
private Button btn_send = null;
private Button btn_login = null;
private static final String HOST = "192.168.0.132";
private static final int PORT = 9999;
private Socket socket = null;
private BufferedReader in = null;
private PrintWriter out = null;
private String content = "";
@Override
public void onCreate(Bundle savedInstanceState) {
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 (Exception ex) {
ex.printStackTrace();
ShowDialog(" :" + ex.getMessage());
}
btn_send.setOnClickListener(new Button.OnClickListener() {
public void onClick(View v) {
// TODO Auto-generated method stub
String msg = ed_msg.getText().toString();
if (socket.isConnected()) {
if (!socket.isOutputShutdown()) {
out.println(msg);
}
}
}
});
new Thread(this).start();
}
public void ShowDialog(String msg) {
new AlertDialog.Builder(this).setTitle(" ").setMessage(msg)
.setPositiveButton("OK", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
// TODO Auto-generated method stub
}
}).show();
}
public void run() {
try {
while (true) {
if(socket.isConnected()){
if(!socket.isInputShutdown()){
if ((content = in.readLine()) != null) {
Log.i("TAG", "++ "+content);
content += "
";
mHandler.sendMessage(mHandler.obtainMessage());
}else{
}
}
}
}
} catch (Exception ex) {
ex.printStackTrace();
}
}
public Handler mHandler = new Handler() {
public void handleMessage(Message msg) {
super.handleMessage(msg);
Log.i("TAG", "-- "+msg);
tv_msg.setText(tv_msg.getText().toString() + content);
}
};
}
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">
<TextView android:id="@+id/TextView" android:singleLine="false"
android:layout_width="fill_parent"
android:layout_height="wrap_content" />
<EditText android:hint="content" android:id="@+id/EditText01"
android:layout_width="fill_parent"
android:layout_height="wrap_content">
</EditText>
<Button android:text="login" android:id="@+id/Button01"
android:layout_width="fill_parent"
android:layout_height="wrap_content">
</Button>
<Button android:text="send" android:id="@+id/Button02"
android:layout_width="fill_parent"
android:layout_height="wrap_content">
</Button>
</LinearLayout>
서버 쪽 을 먼저 시작 하고 클 라 이언 트 프로그램 을 실행 합 니 다.주의:
(1)서버 쪽 과 클 라 이언 트 가 한 기계 에서 실행 되 더 라 도 ip 주 소 를 사용 할 수 없습니다.127.0.0.1 그렇지 않 으 면 프로그램 이 연결 을 거부 하 는 오류 가 발생 할 수 있 습 니 다.
(2)클 라 이언 트 와 서버 쪽 은 하나의 프로젝트 에 만 들 지 않 는 것 이 좋 습 니 다.각각 프로젝트 를 만 든 다음 에 서버 쪽 과 클 라 이언 트 를 시작 하 는 것 이 좋 습 니 다.그렇지 않 으 면 Error:Should NotReachHere()오류 가 발생 합 니 다.안 드 로 이 드 프로그램 이 main 방법 으로 프로그램의 입구 가 아니 기 때문이다.
실행 효과:
더 많은 안 드 로 이 드 관련 내용 에 관심 이 있 는 독자 들 은 본 사이트 의 주 제 를 볼 수 있다.
본 고 에서 말 한 것 이 여러분 의 안 드 로 이 드 프로 그래 밍 에 도움 이 되 기 를 바 랍 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 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에 따라 라이센스가 부여됩니다.