1. 程式人生 > >android中利用Socket實現手機客戶端與PC端進行通訊

android中利用Socket實現手機客戶端與PC端進行通訊

伺服器端:

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 SocketServer extends Thread{
	
	
	public void run(){
		Socket client;
		String msg="";
		try {
			while(true){
				client=responseSocket();
				while(true){
					msg=receiveMsg(client);
					System.out.println("收到客戶端訊息:"+msg);
					sendMsg(client,msg);
					if(true){
						break;
					}
				}
				closeSocket(client);
			}
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
	
	
	public static final int PORT=9999;
	ServerSocket ss;
	BufferedWriter bw;
	BufferedReader br;
	
	public void createSocket() throws IOException{
		ss=new ServerSocket(PORT);
		System.out.println("伺服器已經開啟······");
	}
	
	public Socket responseSocket() throws IOException{
		Socket client=ss.accept();
		System.out.println("客戶端已經連線······");
		return client;
	}
	
	public void closeSocket(Socket s) throws IOException{
		br.close();
		bw.close();
		s.close();
		System.out.println("客戶端已經關閉······");
	}
	
	public void sendMsg(Socket s,String msg) throws IOException{
		bw=new BufferedWriter(new OutputStreamWriter(s.getOutputStream()));
		bw.write(msg+"\n");
		bw.flush();
	}
	
	public String receiveMsg(Socket s) throws IOException{
		br=new BufferedReader(new InputStreamReader(s.getInputStream()));
		String msg=br.readLine();
		System.out.println("伺服器收到客戶端訊息:"+msg);
		return msg;
	}
	
	
	public SocketServer() throws IOException{
		createSocket();
	}
	
	public static void main(String args[]) throws IOException{
		SocketServer ss=new SocketServer();
		if(ss!=null){
			ss.start();
		}
	}	

}

Android客戶端:

package com.colorful.socket;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.net.Socket;
import java.net.UnknownHostException;

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.TextView;

public class SocketClient extends Activity {
	
	TextView tv;
	EditText et;
	Button btn;
	
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        init();
    }
    public void init(){
    	et=(EditText)findViewById(R.id.et);
    	btn=(Button)findViewById(R.id.btn);
    	tv=(TextView)findViewById(R.id.tv);
    	
    	btn.setOnClickListener(new OnClickListener(){
			@Override
			public void onClick(View v) {
				// TODO Auto-generated method stub
				String s=et.getText().toString();
				try {
					connectToServer(s);
				} catch (UnknownHostException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				} catch (IOException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
			}    		
    	});
    	
    }
    
    public void connectToServer(String s) throws UnknownHostException, IOException{
    	Socket client=requestSocket("輸入電腦的IP地址",9999);
    	sendMsg(client,s);
    	String str=receiveMsg(client);
    	tv.setText(str);
    	System.out.println(str);
    }
    
    public Socket requestSocket(String host,int port) throws UnknownHostException, IOException{
    	Socket s=new Socket(host,port);
    	return s;
    }
    
    public void sendMsg(Socket socket,String msg) throws IOException{
    	BufferedWriter writer=new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));
    	writer.write((msg.replaceAll("\n", "")+"\n"));
    	writer.flush();
    }
    
    public String receiveMsg(Socket socket) throws IOException{
    	BufferedReader reader=new BufferedReader(new InputStreamReader(socket.getInputStream()));
    	String msg=reader.readLine();
    	return msg;
    }
    
}

最後不要在AndroidManifest.xml中新增如下許可權:

<uses-permission android:name="android.permission.INTERNET"/>