美文网首页andriod
Android局域网内通过socket通信

Android局域网内通过socket通信

作者: 60916fc63567 | 来源:发表于2016-12-21 15:53 被阅读313次

两台Android手机在局域网内通过socket通信:

1:两个手机需要在同一个局域网里面

2:修改客户端Client里面的IP地址,IP地址设置为作为服务端的手机的IP地址

3:最下面为服务端,要安装到一个手机里并先运行起来,会显示本机IP地址,显示Client传来的信息,并给Client反馈

4:Client为客户端,有一个输入框和发送按钮,显示传过去的信息

client端

/**

* create by caoyinfei

*/

public class MainActivity extends Activity {

TextView result;

Button send;

EditText input;

public Handler myHandler = new Handler() {

@Override

public void handleMessage(Message msg) {

if (msg.what == 1) {

result.append("server:" + msg.obj + "\n");

}

}

};

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

result = (TextView) findViewById(R.id.result);

send = (Button) findViewById(R.id.send);

input = (EditText) findViewById(R.id.input);

send.setOnClickListener(new OnClickListener() {

@Override

public void onClick(View v) {

String inputContent = input.getText().toString();

result.append("client:" + inputContent + "\n");

//启动线程 向服务器发送和接收信息

new MyThread(inputContent).start();

}

});

}

class MyThread extends Thread {

public String content;

public MyThread(String str) {

content = str;

}

@Override

public void run() {

//定义消息

Message msg = new Message();

msg.what = 1;

try {

//连接服务器 并设置连接超时为5秒

Socket socket = new Socket();

socket.connect(new InetSocketAddress("10.100.165.33", 30000), 1000);

//获取输入输出流

OutputStream ou = socket.getOutputStream();

//获取输出输出流

BufferedReader bff = new BufferedReader(new InputStreamReader(

socket.getInputStream()));

//向服务器发送信息

ou.write(content.getBytes("utf-8"));

ou.flush();

//读取发来服务器信息

String result = "";

String buffer = "";

while ((buffer = bff.readLine()) != null) {

result = result + buffer;

}

msg.obj = result.toString();

//发送消息 修改UI线程中的组件

myHandler.sendMessage(msg);

//关闭各种输入输出流

bff.close();

ou.close();

socket.close();

} catch (SocketTimeoutException aa) {

//连接超时 在UI界面显示消息

msg.obj =  "服务器连接失败!请检查网络是否打开";

//发送消息 修改UI线程中的组件

myHandler.sendMessage(msg);

} catch (IOException e) {

e.printStackTrace();

}}}}

server端:

/**

* create by caoyinfei

*/

public class MainActivity extends Activity {

public static TextView client_content, ip;

private String serverIp = "";

String buffer = "";

public static Handler mHandler = new Handler() {

@Override

public void handleMessage(android.os.Message msg) {

if (msg.what == 1) {

client_content.append("client" + msg.obj + "\n");

}

}

;

};

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

client_content = (TextView) findViewById(R.id.client_content);

ip = (TextView) findViewById(R.id.ip);

serverIp = getlocalip();

ip.setText("IP addresss:" + serverIp);

LogUtil.d("dd","ddddddddddd");

new Thread() {

public void run() {

OutputStream output;

String serverContent = "hello hehe";

try {

ServerSocket serverSocket = new ServerSocket(30000);

while (true) {

Message msg = new Message();

msg.what = 1;

try {

Socket socket = serverSocket.accept();

//向client发送消息

output = socket.getOutputStream();

output.write(serverContent.getBytes("utf-8"));

output.flush();

socket.shutdownOutput();

//获取输入信息

BufferedReader bff = new BufferedReader(new InputStreamReader

(socket.getInputStream()));

//读取信息

String result = "";

String buffer = "";

while ((buffer = bff.readLine()) != null) {

result = result + buffer;

}

msg.obj = result.toString();

mHandler.sendMessage(msg);

bff.close();

output.close();

socket.close();

} catch (IOException e) {

e.printStackTrace();

}

}

} catch (IOException e1) {

e1.printStackTrace();

}

}

;

}.start();

}

private String getlocalip() {

WifiManager wifiManager = (WifiManager) getSystemService(Context.WIFI_SERVICE);

WifiInfo wifiInfo = wifiManager.getConnectionInfo();

int ipAddress = wifiInfo.getIpAddress();

//  Log.d(Tag, "int ip "+ipAddress);

if (ipAddress == 0) return null;

return ((ipAddress & 0xff) + "." + (ipAddress >> 8 & 0xff) + "."

+ (ipAddress >> 16 & 0xff) + "." + (ipAddress >> 24 & 0xff));

}

}

权限分配:

相关文章

网友评论

  • d9dc2aa471c4:请问源代码还在吗?在的话方便发我一份吗

本文标题:Android局域网内通过socket通信

本文链接:https://www.haomeiwen.com/subject/kapqvttx.html