黑马程序员技术交流社区

标题: 网络编程问题 [打印本页]

作者: 沈艳南    时间: 2013-5-13 00:58
标题: 网络编程问题
本帖最后由 刘胜寒 于 2013-5-18 03:09 编辑

客户端:
import java.io.*;
import java.net.*;
class TcpuplodCilent {
                public static void main(String[] args)throws Exception {
                        Socket s = new Socket("127.0.0.1",10010);
                        OutputStream os = s.getOutputStream();
                        //封装上传文件对象
                        File f = new File("d:\000.txt");
                        BufferedReader bfr = new BufferedReader(new  FileReader(f));
                        String line = null;
                        while((line = bfr.readLine())!=null){
                                byte[] b = line.getBytes();
                                os.write(b);                        
                        }
                }
}
服务端:

import java.io.*;
import java.net.*;
class TCPserverStore {
                public static void main(String[] args) throws Exception {
                        //建立服务端套接字
                        ServerSocket ss = new ServerSocket(10010);
                        //建立侦听器,侦听客户端通信点.
                        Socket s = ss.accept();
                        //建立输入流.
                        InputStream in = s.getInputStream();
                        //读出来的信息保存到服务器打印在控制台上.
                        BufferedReader bfw = new BufferedReader(
                                        new InputStreamReader(in));
                        String line = null;
                        while((line = bfw.readLine())!=null){
                                System.out.println(line);
                        }
                        
                }
}
我这个程序运行不出来 是哪里出错了呢 ? 补充下  这个程序的目的是将文件上传到服务端.
作者: 钟林杰    时间: 2013-5-13 04:19
我刚用你的代码测试了,发现有两种情况可能出错。
1、你是否正在连接互联网?如果你连接了互联网,那么你的IP地址就不再是127.0.0.1了,因为连接互联网之后本地连接会自动给你分配IP,至于多少你可以在本地连接上看。然后把 Socket s = new Socket("127.0.0.1",10010);里面的IP改成你电脑上的。如果不修改你的程序运行时就会卡主不动因为客户端找不到服务端,所以发生不出数据,服务端也接收不到你客户端的数据。
2、你是否开启无线wifi共享你的网络热点?如果是他会抛出connection reset的异常提示。这时你可以关闭wife共享再运行你的程序。
作者: Super_Class    时间: 2013-5-13 07:12
标题: -
本帖最后由 Super_Class 于 2013-5-13 07:13 编辑

楼上回答误区:
     本地回路地址一直都是存在的(本地host文件可以证明)。你写的这个程序需要你打开两个程序端。
   |--可以先运行服务器端  运行Server的字节码
   |--再运行客户机端。
作者: 刘胜寒    时间: 2013-5-13 08:42
楼主请及时注意结贴。。。
作者: 钟林杰    时间: 2013-5-13 12:52
{:soso_e127:}汗,昨晚晕死了,居然搞错了。起床之后再试才知道你的程序那里出了问题。
原来Socket客户端创建了之后必须要在客户端关闭,否则就会抛出 java.net.SocketException: Connection reset异常。
你现在只需要在客户端的while后面加上一句s.close()就O了。

作者: 沈艳南    时间: 2013-5-13 22:17
钟林杰 发表于 2013-5-13 12:52
汗,昨晚晕死了,居然搞错了。起床之后再试才知道你的程序那里出了问题。
原来Socket客户端创 ...

你好,我刚才把无线网关了 也加上s.close(),但是还是运行不出来 出现了下面的异常  

Exception in thread "main" java.net.SocketException: Connection reset
        at java.net.SocketInputStream.read(Unknown Source)
        at java.net.SocketInputStream.read(Unknown Source)
        at sun.nio.cs.StreamDecoder.readBytes(Unknown Source)
        at sun.nio.cs.StreamDecoder.implRead(Unknown Source)
        at sun.nio.cs.StreamDecoder.read(Unknown Source)
        at java.io.InputStreamReader.read(Unknown Source)
        at java.io.BufferedReader.fill(Unknown Source)
        at java.io.BufferedReader.readLine(Unknown Source)
        at java.io.BufferedReader.readLine(Unknown Source)
        at cz.shangke.TCPserverStore.main(TCPserverStore.java:16)

作者: 钟林杰    时间: 2013-5-13 22:50
沈艳南 发表于 2013-5-13 22:17
你好,我刚才把无线网关了 也加上s.close(),但是还是运行不出来 出现了下面的异常  

Exception in thread ...

我Q你吧,你把你修改过的代码发给我看看。




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2