我是靠谱客的博主 现实大叔,最近开发中收集的这篇文章主要介绍java socket wifi_Wifi局域网的Socket通信(只能一对一的连接的情况),觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

服务端:

import android.content.Context;

import android.net.wifi.WifiManager;

import android.os.Handler;

import android.os.Message;

import android.util.Log;

import android.widget.Toast;

import java.io.IOException;

import java.io.InputStream;

import java.net.ServerSocket;

import java.net.Socket;

/**

* Created by Zzm_Pc on 2016/12/28.

*/

public class StartingServerUtils {

private InputStream input;

private NewServerThread newServerThread;

private Handler wifiHandler;

private WifiAcceptThread acceptThread;

private WifiServerThread serverThread;

private WifiManager wifiManager;

private ServerSocket wifiServerSocket;

private Socket wifiSocket;

private Context me;

public StartingServerUtils(Context me, Handler handler) {

this.me = me;

this.wifiHandler = handler;

}

//accept connect

private class WifiServerThread extends Thread {

@Override

public void run() {

super.run();

Log.i("information","WifiServerThread~~");

try {

wifiServerSocket = new ServerSocket(1099);

wifiSocket = wifiServerSocket.accept();

if (wifiSocket != null) {

input = wifiSocket.getInputStream();

Log.i("information", "连接成功~~");

wifiServerSocket.close();

acceptThread.start();

newServerThread.start();

}

} catch (IOException e) {

Log.i("information", e.toString());

}

}

}

//turn string_ip method

private String getStringIp(int ip) {

return (ip & 0xFF) + "." +

((ip >> 8) & 0xFF) + "." +

((ip >> 16) & 0xFF) + "." +

(ip >> 24 & 0xFF);

}

//accept information thread

private class WifiAcceptThread extends Thread {

private boolean is=true;

@Override

public void run() {

super.run();

Log.i("information","wifiAccept~~");

if (input != null) {

while (is) {

Log.i("information","读取~~");

byte[] bytes = new byte[1024];

int length = 0;

try {

if (input!=null && (length = input.read(bytes)) != -1) {

Message msg = new Message();

msg.obj = new String(bytes, 0, length);

wifiHandler.sendMessage(msg);

}

} catch (IOException e) {

is=false;

Log.i("information", "读取异常~~");

}

}

}

}

}

//开启服务的方法

public void startServer() {

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

while (!wifiManager.isWifiEnabled()) {

wifiManager.setWifiEnabled(true);

Toast.makeText(me, "请开wifi~~", Toast.LENGTH_SHORT).show();

}

String ip = getStringIp(wifiManager.getConnectionInfo().getIpAddress());

//展示ip

//

newServerThread = new NewServerThread();

acceptThread = new WifiAcceptThread();

serverThread = new WifiServerThread();

serverThread.start();

}

//是否断开连接,断开则重新开启服务

private class NewServerThread extends Thread {

private boolean is = true;

@Override

public void run() {

super.run();

Log.i("information","NewServerThread~~");

while (is) {

try {

wifiSocket.sendUrgentData(9);

} catch (IOException e) {

Log.i("information", "断开连接了~~");

is = false;

serverThread.interrupt();

acceptThread.interrupt();

wifiServerSocket = null;

try {

wifiSocket.close();

input.close();

} catch (IOException e1) {

Log.i("information", "Socket关闭失败~");

}

input = null;

wifiSocket = null;

wifiManager = null;

startServer();

}

}

Log.i("information","将会重新开启服务~~");

}

}

}

客户端:

public class ConnectServerUtils {

public static String ip = "192.168.1.89";

private AppCompatActivity me;

private WifiManager wifiManager;

private OutputStream output;

static Socket wifiSocket;

public ConnectServerUtils(AppCompatActivity me) {

this.me = me;

}

private class WifiConnectThread extends Thread {

@Override

public void run() {

super.run();

try {

wifiSocket = new Socket(ip, 1099);

output = wifiSocket.getOutputStream();

if (output != null) {

showToast("控制连接成功~~");

} else {

showToast("控制连接失败~请重试!");

}

} catch (IOException e) {

Log.i("information", e.toString());

}

}

}

private void showToast(final String toastInformation) {

me.runOnUiThread(new Runnable() {

@Override

public void run() {

Toast.makeText(me, toastInformation, Toast.LENGTH_SHORT).show();

}

});

}

public OutputStream startConnectServer() {

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

if (!wifiManager.isWifiEnabled()) {

Toast.makeText(me, "请开启wifi~~~~", Toast.LENGTH_SHORT).show();

wifiManager.setWifiEnabled(true);

}

Log.i("information", getStringIp(wifiManager.getConnectionInfo().getIpAddress()));

new WifiConnectThread().start();

SystemClock.sleep(500);

return output;

}

//turn string_ip method

private String getStringIp(int ip) {

return (ip & 0xFF) + "." +

((ip >> 8) & 0xFF) + "." +

((ip >> 16) & 0xFF) + "." +

(ip >> 24 & 0xFF);

}

}

最后记得要关闭:

@Override

protected void onDestroy() {

super.onDestroy();

try {

ConnectServerUtils.wifiSocket.close();

} catch (IOException e) {

Log.i("information", e.toString());

}

ConnectServerUtils.wifiSocket = null;

}

不然按返回键的时候,再次连接,服务端会拒绝你的连接,只要加上以上代码就行了。

最后

以上就是现实大叔为你收集整理的java socket wifi_Wifi局域网的Socket通信(只能一对一的连接的情况)的全部内容,希望文章能够帮你解决java socket wifi_Wifi局域网的Socket通信(只能一对一的连接的情况)所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(77)

评论列表共有 0 条评论

立即
投稿
返回
顶部