Android 개발 socket 통신 - 핸드폰 서버 엔 드 C / S 구조 구현

3319 단어 인터넷 관련
모든 스마트 폰 은 미니 컴퓨터 입 니 다. 학교 에서 가장 좋아 하 는 것 은 바로 10 명의 8 명의 친구 들 과 함께 랜 에서 dota 를 몇 판 하 는 것 입 니 다. 갑자기 생각 났 습 니 다. 핸드폰 C 한 게임 을 가지 고 하 는 것 이 어 떻 습 니까? 와 이 파이, 데 이 터 를 열지 않 아 도 됩 니 다. 몇 개의 핸드폰 은 하 나 를 호스트 로 선택 하고 다른 핸드폰 은 그의 핫 이 슈 를 연결 하면 상호작용 을 해서 게임 을 할 수 있 습 니 다. 얼마나 기 쁩 니까?
실제 실현 과정 에서 핸드폰 자 체 를 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(); } } } } }

클 라 이언 트 의 실현 은 비교적 간단 합 니 다. 클 라 이언 트 코드 는 서버 연결 기능 과 메시지 데 이 터 를 보 내 는 등 기능 을 실현 하면 됩 니 다. 여 기 는 더 이상 붙 이지 않 습 니 다.
필요 하신 분 들 에 게 도움 이 되 셨 으 면 좋 겠 습 니 다. 길이 길 어 요. 천천히 날 아 요.

좋은 웹페이지 즐겨찾기