在安卓内网中通讯,socket学习记录。
1、首先在PC段通过java编写服务器程序,程序来自网上。
import java.io.*;
import java.net.*;
public class EchoServer {
private int port=8000;
private ServerSocket serverSocket;
public EchoServer() throws IOException{
serverSocket=new ServerSocket(port);
System.out.println("服务器启动");
}
public String echo(String msg){
return "echo:"+msg;
}
public PrintWriter getWriter(Socket socket)throws IOException{
OutputStream socketOut=socket.getOutputStream();
return new PrintWriter(socketOut,true);
}
public BufferedReader getReader(Socket socket)throws IOException{
InputStream socketIn=socket.getInputStream();
return new BufferedReader(new InputStreamReader(socketIn));
}
public void service(){
while(true){
Socket socket=null;
try{
socket=serverSocket.accept();//等待客户端连接
System.out.println("New aonnection accepted"
+socket.getInetAddress()+":"
+socket.getPort());
BufferedReader br=getReader(socket);
PrintWriter pw=getWriter(socket);
String msg=null;
while((msg=br.readLine())!=null){
System.out.println(msg);
pw.println(echo(msg));
if(msg.equals("bye"));
break;
}
}catch(IOException e){e.printStackTrace();
}finally{
try{
if(socket!=null)
socket.close();
}catch(IOException e){e.printStackTrace();
}
}
}
}
public static void main(String[] args) throws IOException {
// TODO Auto-generated method stub
new EchoServer().service();
}
}
2.在客服端编写接受线程。
package com.example.sysjiesong;
import java.io.BufferedInputStream;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.io.PrintStream;
import java.io.PrintWriter;
import java.net.Socket;
import android.content.Intent;
import android.os.Handler;
import android.os.Message;
import android.util.Log;
public class RecvThread extends Thread{
Handler mMainHandler;
public RecvThread(Handler mMainHandler)
{
this.mMainHandler = mMainHandler;
}
public void run()
{
try
{
Socket socket = new Socket("192.168.1.100",8000);
while(true)
{
BufferedReader br = new BufferedReader(new InputStreamReader(socket.getInputStream()));
String lin = br.readLine(); //注意方法readLine 接受的数据必须以‘\n’结尾
if(lin != null)
{
Log.i("LOGCAT",lin);
}
else
{
Log.i("LOGCAT","yes");
}
mMainHandler.sendEmptyMessage(Integer.parseInt(lin)); //括号中吧String转换为int
}
}catch(Exception e)
{
Log.i("LOGCAT","eerecv");
e.printStackTrace();
}
}
}
3、在客户端编写发送进程
package com.example.sysjiesong;
import java.io.BufferedInputStream;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.io.PrintStream;
import java.io.PrintWriter;
import java.net.Socket;
import android.content.Intent;
import android.util.Log;
public class SendThread extends Thread{
// Socket socket = null;
// public TongxunActivity(Socket s)
// {
// this.socket = s;
// }
public void run()
{
try
{
Socket socket = new Socket("192.168.1.100",8000);
while(true)
{
// BufferedReader br = new BufferedReader(new InputStreamReader(socket.getInputStream()));
// String lin = br.readLine(); //注意方法readLine 接受的数据必须以‘\n’结尾
//
// if(lin != null)
// {
// Log.i("LOGCAT",lin);
// }
// else
// {
// Log.i("LOGCAT","yes");
// }
PrintStream out = new PrintStream (socket.getOutputStream());
out.println("11111");
Log.i("LOGCAT","11111");
// OutputStream ost = socket.getOutputStream();
// ost.write(("123").getBytes("utf-8"));
// Intent intent = new Intent();
// intent.putExtra("text", lin);
// intent.setClass(TongxunActivity.this, MainActivity.class);
// br.close();
// socket.close();
try
{
this.sleep(2000);
}catch(Exception e)
{
e.printStackTrace();
}
}
}catch(Exception e)
{
Log.i("LOGCAT","eer");
e.printStackTrace();
}
}
}
刚学安卓,程序写的不是很好。还请多多包包涵!MX2手机真机调试,可运行。上位机发送数据只能为数字,不然无法发送到ui,还没找到方法。