android 开发的socket程序的网络问题

android 开发的socket程序的网络问题,第1张

1、用wlan的时候,你的手机与pc相同于同一个局域网,所以肯定能通信的。
2、手机用gprs后,由于是两个不同的网络,而你的服务器IP地址如果是接上路由(包括无线)的
上的,那么你的IP不是对外的IP,只是对路由的IP,这只是一个不行的原因
3、你可以百度ip地址查询,就可以看到你的真正的IP,即对外的IP,即便你用的是对外的IP,这里还是不得,原因是你这个IP的路由下可能还有其他机子,这种情况从外面连的通信就不知道要发往哪台服务器
4、要解决这个问题,你可以尝试下花生壳绑定你的主机,具体做法你可以网上搜索下。

欢迎有问题继续提问,,谢谢!

最近准备在项目中接入socketio(websocket)。
简介
WebSocket是 HTML5 的一种新通信协议,它实现了浏览器与服务器之间的双向通讯。而SocketIO是一个完全由 JavaScript 实现、基于 Nodejs 、支持WebSocket的协议用于实时通信、跨平台的开源框架。
本文将根据 socketio 官方提供的 socketio-android-chat Demo 来讲解 socketio 在 Android 客户端实现即时通讯的一些基本 *** 作。
附上github链接:
Java支持库 socketio-client-java
Android聊天Demo socketio-android-chat

Demo实现了以下功能:
基本文字聊天功能
每个用户加入或者离开时发送通知
用户开始输入信息时发送输入状态的通知

android socket通信协议的封装和解析,其实是和java一样的,都是通过>import javaioBufferedReader;
import javaioBufferedWriter;
import javaioIOException;
import javaioInputStreamReader;
import javaioOutputStreamWriter;
import javaioPrintWriter;
import javanetServerSocket;
import javanetSocket;
import javautilArrayList;
import javautilList;
import javautilconcurrentExecutorService;
import javautilconcurrentExecutors;
public class Main {
    private static final int PORT = 9999;
    private List<Socket> mList = new ArrayList<Socket>();
    private ServerSocket server = null;
    private ExecutorService mExecutorService = null; //thread pool
    
    public static void main(String[] args) {
        new Main();
    }
    public Main() {
        try {
            server = new ServerSocket(PORT);
            mExecutorService = ExecutorsnewCachedThreadPool();  //create a thread pool
            Systemoutprintln("服务器已启动");
            Socket client = null;
            while(true) {
                client = serveraccept();
                //把客户端放入客户端集合中
                mListadd(client);
                mExecutorServiceexecute(new Service(client)); //start a new thread to handle the connection
            }
        }catch (Exception e) {
            eprintStackTrace();
        }
    }
    class Service implements Runnable {
            private Socket socket;
            private BufferedReader in = null;
            private String msg = "";
            
            public Service(Socket socket) {
                thissocket = socket;
                try {
                    in = new BufferedReader(new InputStreamReader(socketgetInputStream()));
                    //客户端只要一连到服务器,便向客户端发送下面的信息。
                    msg = "服务器地址:" +thissocketgetInetAddress() + "come toal:"
                        +mListsize()+"(服务器发送)";
                    thissendmsg();
                } catch (IOException e) {
                    eprintStackTrace();
                }
                
            }
            @Override
            public void run() {
                try {
                    while(true) {
                        if((msg = inreadLine())!= null) {
                            //当客户端发送的信息为:exit时,关闭连接
                            if(msgequals("exit")) {
                                Systemoutprintln("ssssssss");
                                mListremove(socket);
                                inclose();
                                msg = "user:" + socketgetInetAddress()
                                    + "exit total:" + mListsize();
                                socketclose();
                                thissendmsg();
                                break;
                                //接收客户端发过来的信息msg,然后发送给客户端。
                            } else {
                                msg = socketgetInetAddress() + ":" + msg+"(服务器发送)";
                                thissendmsg();
                            }
                        }
                    }
                } catch (Exception e) {
                    eprintStackTrace();
                }
            }
          /
            循环遍历客户端集合,给每个客户端都发送信息。
           /
           public void sendmsg() {
               Systemoutprintln(msg);
               int num =mListsize();
               for (int index = 0; index < num; index ++) {
                   Socket mSocket = mListget(index);
                   PrintWriter pout = null;
                   try {
                       pout = new PrintWriter(new BufferedWriter(
                               new OutputStreamWriter(mSocketgetOutputStream())),true);
                       poutprintln(msg);
                   }catch (IOException e) {
                       eprintStackTrace();
                   }
               }
           }
        }    
}


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/zz/10616124.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-10
下一篇 2023-05-10

发表评论

登录后才能评论

评论列表(0条)

保存