안 드 로 이 드 는 웹 소켓 프로 토 콜 을 이용 하여 서버 와 통신 합 니 다.

5633 단어 Android
최근 에 프로젝트 를 만 들 려 면 서버 가 자발적으로 메 시 지 를 클 라 이언 트 에 전송 해 야 합 니 다.이렇게 되면 일반적인 http 연결 을 사용 할 수 없습니다.블 로 거들 이 친구 에 게 웹 소켓 프로 토 콜 을 추천 해 달라 고 물 어 봤 는데 효과 가 좋 더 라 고요.
안 드 로 이 드 자체 에 웹 소켓 라 이브 러 리 가 없습니다.직접 다운로드 해 야 합 니 다. http://autobahn.ws/android/downloads
클 라 이언 트 코드...
인터페이스 레이아웃 은 스스로 쓰 고 간단 한 button 두 개 입 니 다.
package com.example.test;

import com.example.test.R;

import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;
import de.tavendo.autobahn.WebSocketConnection;
import de.tavendo.autobahn.WebSocketConnectionHandler;
import de.tavendo.autobahn.WebSocketException;

public class MainActivity extends Activity implements OnClickListener {

	private Button bt;
	private EditText ed_name;
	private EditText ed_text;
	private Button bt1;
	WebSocketConnection wsc;
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		bt = (Button) findViewById(R.id.bt);
		ed_name = (EditText) findViewById(R.id.ed_name);
		ed_text = (EditText) findViewById(R.id.ed_text);
		bt1 = (Button) findViewById(R.id.bt1);
		bt.setOnClickListener(this);
		bt1.setOnClickListener(this);
		wsc = new WebSocketConnection();

	}

	private void connect() {
		System.out.println("    websocket///");

		try {

			wsc.connect("ws://192.168.1.245:8080/DriveServer/mainservlet",
					new WebSocketConnectionHandler() {
				
						@Override
						public void onBinaryMessage(byte[] payload) {
							System.out.println("onBinaryMessage size="
									+ payload.length);
						}

						@Override
						public void onClose(int code, String reason) {
							System.out.println("onClose reason=" + reason);
						}

						@Override
						public void onOpen() {
							System.out.println("onOpen");
							showtext("    ");
							// wsc.sendTextMessage("Hello!");
							// wsc.disconnect();
						}
						@Override
						public void onRawTextMessage(byte[] payload) {
							System.out.println("onRawTextMessage size="
									+ payload.length);
						}

						@Override
						public void onTextMessage(String payload) {
							System.out.println("onTextMessage" + payload);
							showtext(payload);
						}

					});
		} catch (WebSocketException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}

	}
	@Override
	public void onClick(View v) {
		// TODO Auto-generated method stub
		int id = v.getId();
		switch (id) {
			case R.id.bt :
				wsc.sendTextMessage("     ,   ws       ");
				break;
			case R.id.bt1 :
				connect();
				break;
			default :
				break;
		}
	}
	private void showtext(String msg) {
		Toast.makeText(this, msg, 0).show();
	}
}

다음은 서버 코드:
Jetty 7 자체 웹 소켓 라 이브 러 리 를 사용 합 니 다.
package com.websocket;

import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.nio.ByteBuffer;
import java.nio.CharBuffer;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Set;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.eclipse.jetty.websocket.WebSocket;
import org.eclipse.jetty.websocket.WebSocket.OnTextMessage;
import org.eclipse.jetty.websocket.WebSocketServlet;

public class ChatWebSocketServlet extends WebSocketServlet {

	private static final long serialVersionUID = 911879078000755859L;

	private List list = new ArrayList();

	class MyWebSocket implements OnTextMessage {
		private String userName = "    ";

		public MyWebSocket(String userName) {
			if (userName != null && userName.length() > 0) {
				this.userName = userName;
			}
		}

		private Connection conn;

		public void onClose(int arg0, String arg1) {
			// TODO Auto-generated method stub
			System.out.println("onOpen      。。。。。。。。" + arg1 + "  " + arg0);
			list.remove(this);
		}

		public void onOpen(Connection arg0) {
			// TODO Auto-generated method stub
			System.out
					.println("onOpen    。。。。。。。。。。。。" + arg0.getMaxIdleTime());
			this.conn = arg0;
			
			if (!list.contains(arg0)) {
				list.add(this);
			} else {
				System.out.println("         ");
			}
			System.out.println(".." + list.size());
		}

		public void onMessage(String arg0) {
			
			String toname = arg0.substring(0, 3);
			System.out.println("toname-->" + toname);
			try {
				
				list.get(0).getConn()
						.sendMessage(arg0.substring(3));
				System.out.println("     " + arg0.substring(3));
			} catch (IOException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}

		private Connection getConn() {
			return this.conn;
		}
	}

	public WebSocket doWebSocketConnect(HttpServletRequest arg0, String arg1) {
		// TODO Auto-generated method stub
		String name = "";
		name = arg0.getParameter("username");
		System.out.println(name + "is connected");
		return new MyWebSocket(name);
	}

	@Override
	protected void service(HttpServletRequest request,
			HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
		super.service(request, response);
	}

}

교 류 를 환영 합 니 다.전재 출처 를 밝 혀 주세요.

좋은 웹페이지 즐겨찾기