android关于socket编程,以聊天为例【转】http://hi.baidu.com/yaoyuanhuajx/item/9b93d7565f315ba9acc857d7...
一步一步android(15):關于socket編程【以聊天為例】
Android手機的應用,除了它的手機功能之外,另外一個吸引人的地方在于它的開放性,這一點iphone無法比擬,至少iphone太多商業化氣息。
如同當年windows95一樣,android為我們開啟另一扇交流之窗,而要實現交流,socket通信必不可少。
java在socket通信方面上已經有了很好的范例,我只是拋磚引玉,將其引入到android之中,疏漏之處在所難免,很多地方也值得深思與考量,高手不必拍磚,可跳過此文。
下面,用敲門的方式演示Android如何實現套接字的通信。
本例實現功能如下:
Server端開啟服務
Client端發起鏈接請求,并向Server端發送數據
Server端響應請求,并在Server顯示,向Client端返回數據
Client端接收Server的數據并顯示
本例效果如下:
終端1:
?
終端2:
?
Server端:
本例源代碼如下:
Server端:
package com.android.Yao;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.net.ServerSocket;
import java.net.Socket;
public class YaoChatServer extends Thread {
private YaoChatServer() throws IOException {
?? CreateSocket();
?? //創建Socket服務器
}
public void run() {?
?? Socket client;
?? String txt;
?? try {?
??? while (true)
??? //線程無限循環,實時監聽socket端口
??? {
???? client=ResponseSocket();???????
???? //響應客戶端鏈接請求。。
????
???? while(true)
???? {
????? txt=ReceiveMsg(client);??
????? System.out.println(txt);
????? //鏈接獲得客戶端發來消息,并將其顯示在Server端的屏幕上
???
????? SendMsg(client,txt);
????? //向客戶端返回消息
????? if(true)break;
????? //中斷,繼續等待鏈接請求
???? }
????
???? CloseSocket(client);
???? //關閉此次鏈接
??? }???
?? }?
?? catch (IOException e) {
??? System.out.println(e);
?? }
}
private ServerSocket server = null;
private static final int PORT = 5000;
private BufferedWriter writer;
private BufferedReader reader;
private void CreateSocket() throws IOException
{
?? server = new ServerSocket(PORT, 100);
?? System.out.println("Server starting..");??
}
private Socket ResponseSocket() throws IOException
{
?? Socket client = server.accept();?
?? System.out.println("client connected..");
??
?? return client;
}
private void CloseSocket(Socket socket) throws IOException
{
?? reader.close();
?? writer.close();
?? socket.close();
?? System.out.println("client closed..");
}
private void SendMsg(Socket socket,String Msg) throws IOException?
{
?? writer = new BufferedWriter(
????? new OutputStreamWriter(socket.getOutputStream()));
??? writer.write(Msg+"\n");
??? writer.flush();
???
}
private String ReceiveMsg(Socket socket) throws IOException
{
?? reader = new BufferedReader(
???? new InputStreamReader(socket.getInputStream()));?????
??? System.out.println("server get input from client socket..");
??? String txt="Sever send:"+reader.readLine();
???
??? return txt;
}
public static void main(final String args[]) throws IOException {
?? YaoChatServer yaochatserver = new YaoChatServer();
?? if (yaochatserver != null) {
??? yaochatserver.start();
?? }
}
}
?
Client端:
package com.android.Yao;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.net.UnknownHostException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.net.Socket;
import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.*;
public class YaoChatRoomAndroid extends Activity {
??? /** Called when the activity is first created. */
??? @Override
??? public void onCreate(Bundle savedInstanceState) {
??????? super.onCreate(savedInstanceState);
??????? setContentView(R.layout.chatroom);
???????
??????? findviews();
??????? setonclick();
??? }
??? private EditText chattxt;
??? private TextView chattxt2;
??? private Button chatok;
????
??? public void findviews()
??? {
??????? chattxt = (EditText)this.findViewById(R.id.chattxt);
??????? chattxt2 = (TextView)this.findViewById(R.id.chattxt2);
??????? chatok?? = (Button)this.findViewById(R.id.chatOk);
??? }
????
??? private void setonclick()
??? {
??????? chatok.setOnClickListener(new View.OnClickListener() {
???
??? @Override
??? public void onClick(View v) {
???? try {
????? connecttoserver(chattxt.getText().toString());
???? } catch (UnknownHostException e) {
????? // TODO Auto-generated catch block
????? e.printStackTrace();
???? } catch (IOException e) {
????? // TODO Auto-generated catch block
????? e.printStackTrace();
???? }
??? }
?? });
??? }
??? public void connecttoserver(String socketData) throws UnknownHostException, IOException
{
??? Socket socket=RequestSocket("192.168.0.107",5000);
?? SendMsg(socket,socketData);??
?? String txt = ReceiveMsg(socket);
?? this.chattxt2.setText(txt); ???
}
????
??? private Socket RequestSocket(String host,int port) throws UnknownHostException, IOException
??? {???
??? Socket socket = new Socket(host, port);
??? return socket;
??? }
????
??? private void SendMsg(Socket socket,String msg) throws IOException
??? {
??? BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));
?? writer.write(msg.replace("\n", " ")+"\n");
?? writer.flush();
??? }
????
??? private String ReceiveMsg(Socket socket) throws IOException
??? {
??? BufferedReader reader = new BufferedReader(new InputStreamReader(socket.getInputStream()));
????
?? String txt=reader.readLine();
?? return txt;
??? }????
}
轉載于:https://www.cnblogs.com/songtzu/archive/2013/01/30/2883622.html
總結
以上是生活随笔為你收集整理的android关于socket编程,以聊天为例【转】http://hi.baidu.com/yaoyuanhuajx/item/9b93d7565f315ba9acc857d7...的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Asp.NetCoreWebApi入门
- 下一篇: 快速切換手機版網頁語法