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();
}
}
}
}
}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)