Android 개발 socket 통신 - 핸드폰 서버 엔 드 C / S 구조 구현
3319 단어 인터넷 관련
실제 실현 과정 에서 핸드폰 자 체 를 server 로 하 는 수단 은 정말 사용 하 는 사람 이 별로 없다 는 것 을 알 게 되 었 습 니 다. 인터넷 에 도 이미 만들어 진 해결 방안 이 별로 없습니다. 한 번 의 모색 을 통 해 핸드폰 자체 가 server (클 라 이언 트 겸) 를 하 는 socket 통신 기능 을 간단하게 실현 하 였 습 니 다. 적어 주 십시오. 여러분 께 서 지 도 를 해 주시 고 나중에 재 활용 하기에 편리 합 니 다.
가장 큰 문 제 는 server 엔 드 socket 의 차단 문제 일 수 있 습 니 다. server 엔 드 에 socket 이 감청 상태 에 있어 야 클 라 이언 트 의 연결 요청 과 클 라 이언 트 가 보 낸 메 시 지 를 계속 받 아들 여 모든 클 라 이언 트 기기 에 방송 할 수 있 습 니 다.따라서 저 희 는 server socket 을 MainActivity 에 놓 을 수 없습니다. app 의 운행 을 막 을 수 있 기 때문에 service 를 새로 만 들 수 있 습 니 다. service 에서 server socket 의 동작 을 정의 하고 MainActivity 에서 button 을 정의 하 며 button 을 통 해 service 를 시작 하여 server 단 을 열 수 있 습 니 다.나의 service 코드 는 다음 과 같다.
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.ArrayList;
import android.app.Service;
import android.content.Intent;
import android.os.Bundle;
import android.os.IBinder;
import android.os.Message;
public class ServerSocketService extends Service{
private static ArrayList socketList = new ArrayList();
private ServerSocket serverSocket = null;
@Override
public IBinder onBind(Intent intent){
return null;
}
@Override
public void onCreate(){
super.onCreate();
}
@Override
public void onDestroy(){
super.onDestroy();
}
@Override
public int onStartCommand(Intent intent, int flags, int startId){
try{
new Thread(new ServerThread()).start();
}catch(Exception e){
e.printStackTrace();
}
return START_STICKY;
}
public class ServerThread implements Runnable{
private Socket socket = null;
public ServerThread(){
}
public void run(){
try{
serverSocket = new ServerSocket(4567);
while(true){
socket = serverSocket.accept();
socketList.add(socket);
new Thread(new HandleInputMessageThread(socket)).start();
}
}catch(IOException e){
e.printStackTrace();
}
}
}
public class HandleInputMessageThread implements Runnable{
private Socket socket = null;
public HandleInputMessageThread(Socket sock){
this.socket = sock;
}
public void run(){
while(true){
InputStream inputStream = null;
try{
inputStream = socket.getInputStream();
byte data[] = new byte[1024*4];
int i = 0;
while((i = inputStream.read(data))!=-1){
String buffer = null;
buffer = new String(data,"gbk");
buffer = buffer.trim() + "
";
OutputStream outputStream = null;
for(Socket sock : socketList){
outputStream = sock.getOutputStream();
outputStream.write(buffer.getBytes("gbk"));
outputStream.flush();
}
break;
}
}catch(IOException e){
e.printStackTrace();
}
}
}
}
}
클 라 이언 트 의 실현 은 비교적 간단 합 니 다. 클 라 이언 트 코드 는 서버 연결 기능 과 메시지 데 이 터 를 보 내 는 등 기능 을 실현 하면 됩 니 다. 여 기 는 더 이상 붙 이지 않 습 니 다.
필요 하신 분 들 에 게 도움 이 되 셨 으 면 좋 겠 습 니 다. 길이 길 어 요. 천천히 날 아 요.