A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 沈艳南 中级黑马   /  2013-5-13 00:58  /  1799 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 刘胜寒 于 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-18 03:08

评分

参与人数 1技术分 +1 收起 理由
Sword + 1

查看全部评分

6 个回复

倒序浏览
我刚用你的代码测试了,发现有两种情况可能出错。
1、你是否正在连接互联网?如果你连接了互联网,那么你的IP地址就不再是127.0.0.1了,因为连接互联网之后本地连接会自动给你分配IP,至于多少你可以在本地连接上看。然后把 Socket s = new Socket("127.0.0.1",10010);里面的IP改成你电脑上的。如果不修改你的程序运行时就会卡主不动因为客户端找不到服务端,所以发生不出数据,服务端也接收不到你客户端的数据。
2、你是否开启无线wifi共享你的网络热点?如果是他会抛出connection reset的异常提示。这时你可以关闭wife共享再运行你的程序。

点评

127.0.0.1 是本地环回地址,也就是本地主机的另一个IP。。在cmd 命令行ping 127.0.0.1 是可以ping通。。 LocalHost对应的就是127.0.0.1  发表于 2013-5-13 08:41
回复 使用道具 举报

-

本帖最后由 Super_Class 于 2013-5-13 07:13 编辑

楼上回答误区:
     本地回路地址一直都是存在的(本地host文件可以证明)。你写的这个程序需要你打开两个程序端。
   |--可以先运行服务器端  运行Server的字节码
   |--再运行客户机端。

评分

参与人数 1技术分 +1 收起 理由
刘胜寒 + 1

查看全部评分

回复 使用道具 举报
楼主请及时注意结贴。。。
回复 使用道具 举报
{:soso_e127:}汗,昨晚晕死了,居然搞错了。起床之后再试才知道你的程序那里出了问题。
原来Socket客户端创建了之后必须要在客户端关闭,否则就会抛出 java.net.SocketException: Connection reset异常。
你现在只需要在客户端的while后面加上一句s.close()就O了。
回复 使用道具 举报
钟林杰 发表于 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:17
你好,我刚才把无线网关了 也加上s.close(),但是还是运行不出来 出现了下面的异常  

Exception in thread ...

我Q你吧,你把你修改过的代码发给我看看。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马