new socket 连接超时是为毛

谁学逆向工程 2016-10-15 06:40:40
new socket 语句连接超时
AndroidManifest.xml已经添加过权限了
package com.example.administrator.ffffff;

import android.app.Activity;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.widget.EditText;
import android.widget.LinearLayout;
import android.widget.RelativeLayout;
import android.widget.TextView;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.Socket;

public class MainActivity extends Activity {

EditText show;

protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

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

new Thread()
{
public void run()
{
try
{
Socket socket = new Socket("192.168.1.102",30000);//这里连接超时
BufferedReader br = new BufferedReader(new InputStreamReader(socket.getInputStream()));
String line = br.readLine();
show.setText("来自服务器的数据:" + line);
br.close();
socket.close();
}
catch (IOException e)
{
e.printStackTrace();
}
}
}.start();
}
}



//这个代码是运行在 Windows 上的
import java.util.concurrent.locks.*;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.*;
import java.io.*;
import javax.swing.*;
import java.awt.*;
import java.net.*;


public class dd
{
public static void main(String[]args)throws IOException
{
ServerSocket ss = new ServerSocket(30000);
while(true)
{
Socket s= ss.accept();
OutputStream os = s.getOutputStream();
os.write("您好,您收到了服务器的新年祝福!\n".getBytes("utf-8"));
os.close();
ss.close();
}
}

}

发个截图来证明电脑IP地址没错
...全文
495 19 打赏 收藏 转发到动态 举报
写回复
用AI写文章
19 条回复
切换为时间正序
请发表友善的回复…
发表回复
hy965 2016-10-18
  • 打赏
  • 举报
回复
网络问题,连接超时,服务器问题
谁学逆向工程 2016-10-16
  • 打赏
  • 举报
回复
引用 7 楼 qq_25412055 的回复:
你用模拟器可以保证你的android是连的到java端的socket的,但是你现在用真机可能不行,现在的问题可能在这。或者你直接拿书的光盘里的代码运行一下。


引用 9 楼 qq_34847086 的回复:
谁说子线程一定不能更新ui的


问题解决了,不是代码的问题,是特么的的 Windows 防火墙没关闭。但是成功连接以后 Windows 服务器发生了个异常,这是怎么回事。代码还是上面的代码。
zd9991 2016-10-16
  • 打赏
  • 举报
回复
运行光盘也不行,电脑服务器没反应!
谁学逆向工程 2016-10-16
  • 打赏
  • 举报
回复
引用 7 楼 qq_25412055 的回复:
或者你直接拿书的光盘里的代码运行一下。
运行光盘也不行,电脑服务器没反应,手机也没反应
谁学逆向工程 2016-10-16
  • 打赏
  • 举报
回复
引用 15 楼 qq_25412055 的回复:
调用accept方法之前,socket已经被close了
怎么可能
哈哈gogo 2016-10-16
  • 打赏
  • 举报
回复
楼上的都说了,
林一天 2016-10-16
  • 打赏
  • 举报
回复
以后这种情况下,可以先ping一下电脑端,看是否能ping通,防止浪费时间!
LoveWyf_ 2016-10-16
  • 打赏
  • 举报
回复
引用 9楼qq_34847086 的回复:
[quote=引用 5 楼 qq_25412055 的回复:] [quote=引用 4 楼 xiaoyuanyuan2009 的回复:] [quote=引用 3 楼 qq_25412055 的回复:] 你现在只监听一次,连接不上很正常。而且子线程你是不能更新ui的,所以不能调用setText方法,需要用handler处理
这段代码是客户端,不是服务器!! 另外,这段代码是照书打的,《疯狂Android讲义》第三版的565页[/quote] 这个肯定是错的,android子线程是不能去更新ui的,除非用handler之类。这个例子我没去敲过,我感觉还是你的手机问题,你用模拟器试试[/quote] 谁说子线程一定不能更新ui的[/quote]请写一个子线程更新ui的代码给我看看
LoveWyf_ 2016-10-16
  • 打赏
  • 举报
回复
引用 14 楼 xiaoyuanyuan2009 的回复:
[quote=引用 7 楼 qq_25412055 的回复:] 你用模拟器可以保证你的android是连的到java端的socket的,但是你现在用真机可能不行,现在的问题可能在这。或者你直接拿书的光盘里的代码运行一下。
引用 9 楼 qq_34847086 的回复:
谁说子线程一定不能更新ui的
问题解决了,不是代码的问题,是特么的的 Windows 防火墙没关闭。但是成功连接以后 Windows 服务器发生了个异常,这是怎么回事。代码还是上面的代码。 [/quote] 调用accept方法之前,socket已经被close了
qq_34847086 2016-10-16
  • 打赏
  • 举报
回复
引用 8 楼 xiaoyuanyuan2009 的回复:
[quote=引用 7 楼 qq_25412055 的回复:] 或者你直接拿书的光盘里的代码运行一下。
各种编译错误,R文件都找不到了。先睡觉了,困死了。明天在 看看[/quote] r文件找不到 说明你的 布局和图片之类的 有叉叉 , 仔细检查
qq_34847086 2016-10-16
  • 打赏
  • 举报
回复
引用 5 楼 qq_25412055 的回复:
[quote=引用 4 楼 xiaoyuanyuan2009 的回复:] [quote=引用 3 楼 qq_25412055 的回复:] 你现在只监听一次,连接不上很正常。而且子线程你是不能更新ui的,所以不能调用setText方法,需要用handler处理
这段代码是客户端,不是服务器!! 另外,这段代码是照书打的,《疯狂Android讲义》第三版的565页[/quote] 这个肯定是错的,android子线程是不能去更新ui的,除非用handler之类。这个例子我没去敲过,我感觉还是你的手机问题,你用模拟器试试[/quote] 谁说子线程一定不能更新ui的
谁学逆向工程 2016-10-15
  • 打赏
  • 举报
回复
引用 7 楼 qq_25412055 的回复:
或者你直接拿书的光盘里的代码运行一下。
各种编译错误,R文件都找不到了。先睡觉了,困死了。明天在 看看
LoveWyf_ 2016-10-15
  • 打赏
  • 举报
回复
引用 6 楼 xiaoyuanyuan2009 的回复:
[quote=引用 5 楼 qq_25412055 的回复:] 这个肯定是错的,android子线程是不能去更新ui的,除非用handler之类。这个例子我没去敲过,我感觉还是你的手机问题,你用模拟器试试
木有模拟器,就算模拟器好使了,最终也还是要解决真机才算解决问题。[/quote] 你用模拟器可以保证你的android是连的到java端的socket的,但是你现在用真机可能不行,现在的问题可能在这。或者你直接拿书的光盘里的代码运行一下。
谁学逆向工程 2016-10-15
  • 打赏
  • 举报
回复
引用 5 楼 qq_25412055 的回复:
这个肯定是错的,android子线程是不能去更新ui的,除非用handler之类。这个例子我没去敲过,我感觉还是你的手机问题,你用模拟器试试
木有模拟器,就算模拟器好使了,最终也还是要解决真机才算解决问题。
LoveWyf_ 2016-10-15
  • 打赏
  • 举报
回复
引用 4 楼 xiaoyuanyuan2009 的回复:
[quote=引用 3 楼 qq_25412055 的回复:] 你现在只监听一次,连接不上很正常。而且子线程你是不能更新ui的,所以不能调用setText方法,需要用handler处理
这段代码是客户端,不是服务器!! 另外,这段代码是照书打的,《疯狂Android讲义》第三版的565页[/quote] 这个肯定是错的,android子线程是不能去更新ui的,除非用handler之类。这个例子我没去敲过,我感觉还是你的手机问题,你用模拟器试试
谁学逆向工程 2016-10-15
  • 打赏
  • 举报
回复
引用 3 楼 qq_25412055 的回复:
你现在只监听一次,连接不上很正常。而且子线程你是不能更新ui的,所以不能调用setText方法,需要用handler处理
这段代码是客户端,不是服务器!! 另外,这段代码是照书打的,《疯狂Android讲义》第三版的565页
LoveWyf_ 2016-10-15
  • 打赏
  • 举报
回复
引用 2 楼 xiaoyuanyuan2009 的回复:
[quote=引用 1 楼 qq_25412055 的回复:] 如果你用的是真机的话,让你电脑开热点,手机连着电脑的热点再试一下
什么叫开热点。手机和电脑都在同一个路由器下,为毛连不上[/quote]
 new Thread()
        {
            public void run()
            {
                try
                {
                    Socket socket = new Socket("192.168.1.102",30000);//这里连接超时
                    BufferedReader br = new BufferedReader(new InputStreamReader(socket.getInputStream()));
                    String line = br.readLine();
                    show.setText("来自服务器的数据:" + line);
                    br.close();
                    socket.close();
                }
                catch (IOException e)
                {
                    e.printStackTrace();
                }
            }
        }.start();
这段写的很有问题,你应该需要新建一个子线程,通过white(ture){ //监听是否有信息 } 你现在只监听一次,连接不上很正常。而且子线程你是不能更新ui的,所以不能调用setText方法,需要用handler处理
谁学逆向工程 2016-10-15
  • 打赏
  • 举报
回复
引用 1 楼 qq_25412055 的回复:
如果你用的是真机的话,让你电脑开热点,手机连着电脑的热点再试一下
什么叫开热点。手机和电脑都在同一个路由器下,为毛连不上
LoveWyf_ 2016-10-15
  • 打赏
  • 举报
回复
如果你用的是真机的话,让你电脑开热点,手机连着电脑的热点再试一下

80,348

社区成员

发帖
与我相关
我的任务
社区描述
移动平台 Android
androidandroid-studioandroidx 技术论坛(原bbs)
社区管理员
  • Android
  • yechaoa
  • 失落夏天
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧