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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 黄玉昆 黑马帝   /  2013-3-12 11:10  /  2072 人查看  /  12 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 黄玉昆 于 2013-3-12 13:41 编辑

今天看毕老师的第24天的第五个视频,我就看晕了,怎么也做不出老师的效果,请明白的帮忙解答下,代码如下:

  1. import java.io.*;
  2. import java.net.*;

  3. class Server
  4. {
  5.         public static void main(String[] args) throws Exception
  6.         {
  7.                 ServerSocket ss = new ServerSocket(10003);
  8.                 Socket s = ss.accept();
  9.                 System.out.println(s.getInetAddress().getHostAddress());
  10.                
  11.                 InputStream in = s.getInputStream();

  12.                 byte[] b = new byte[1024];
  13.                 int len = in.read(b);
  14.                 System.out.println(new String(b,0,len));
  15.                
  16.                 PrintWriter out = new PrintWriter(s.getOutputStream(),true);
  17.                 //out.println("客户端你好");
  18.                 out.println("<font color='red' size='7'>客户端你好</font>");
  19.                 s.close();
  20.                 ss.close();
  21.         }
  22. }
  23. /*
  24. 192.168.1.101
  25. GET / HTTP/1.1
  26. Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/x-shock
  27. wave-flash, application/vnd.ms-excel, application/vnd.ms-powerpoint, application
  28. /msword,
  29. Accept-Language: zh-cn
  30. Accept-Encoding: gzip, deflate
  31. User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; QQDownload 7
  32. 18; .NET CLR 2.0.50727)
  33. Host: 192.168.1.101:10003
  34. Connection: Keep-Alive
  35. */
复制代码
这个是用IE浏览器发送的信息,我写的主页默认是用云遨游的,我按照毕老师的做了一遍,自定义的客户端如下:
  1. import java.io.*;
  2. import java.net.*;

  3. class MyIE
  4. {
  5.         public static void main(String[] args) throws Exception
  6.         {
  7.                 Socket s = new Socket("192.168.1.101",8080);//这里的端口号不确定,不知道是不是8080
  8.                 PrintWriter out = new PrintWriter(s.getOutputStream(),true);
  9.                 out.println("GET D:/JAVA/网编/TCP/myIE.html HTTP/1.1");
  10.                 out.println("Accept:*/*");
  11.                 out.println("Accept-Language: zh-cn");
  12.                 out.println("Host: 192.168.1.101:10003");
  13.                 out.println("Connection: Keep-Alive");
  14.                 out.println();
  15.                 out.println();

  16.                 BufferedReader bufr = new BufferedReader(new InputStreamReader(s.getInputStream()));
  17.                 String line = null;
  18.                 while((line=bufr.readLine())!=null)
  19.                 {
  20.                         System.out.println(line);
  21.                 }
  22.                 s.close();

  23.         }
  24. }
复制代码
我的意思说,我用我想自定义客户端,服务器用遨游的,或者火狐的,并且访问自己本地的那个网页即附件中的,通过这方式就不行了,我也查看了浏览器的端口,每个端口都试了,但是就不行了
附件中有我的网页,保存位置为这个.java文件的当前位置下的myie文件夹中。
编译这个程序,提示的信息和端口号如下:

我的意思是,客户端是我自定义的,我通过在浏览器中键入我的那个网页的地址,直接可以在dos上显示发来的信息,像毕老师的效果一样


请大家帮忙解答一下,谢谢,如果可以的话,请在qq(774515528)上帮我解答,谢谢
帮我解决了问题的童鞋,有丰厚奖励

myIE.rar

660 Bytes, 下载次数: 121

12 个回复

倒序浏览
访问的端口号应该是服务器的端口号  10003  而不是8080  8080只是tomcat服务器的端口号  如果你没有打开tomcat服务器  是访问不到的

评分

参与人数 1技术分 +1 黑马币 +15 收起 理由
黄玉昆 + 1 + 15 感谢

查看全部评分

回复 使用道具 举报
黑马李超 发表于 2013-3-12 11:35
访问的端口号应该是服务器的端口号  10003  而不是8080  8080只是tomcat服务器的端口号  如果你没有打开tom ...

可是我想自定义客户端,服务器用遨游的,或者火狐的,并且访问自己本地的那个网页,通过这方式就不行了,我也查看了浏览器的端口,每个端口都试了,但是就不行了
回复 使用道具 举报
个人建议,
Socket s = new Socket("192.168.1.101",8080);
要开这个端口,
先在cmd 那里执行下 telnet 192.168.1.101 8080
如果通了,说明已经占用了。
没通。。就可以开。。
另外报的是ConnectException: Connect refused
有三种可能:
1.被防火墙防了。(如果是本地,则不会)
2.端口被占用。
3.端口没有开启。

评分

参与人数 1技术分 +1 收起 理由
黄玉昆 + 1 赞一个!

查看全部评分

回复 使用道具 举报
黑马李超 发表于 2013-3-12 11:35
访问的端口号应该是服务器的端口号  10003  而不是8080  8080只是tomcat服务器的端口号  如果你没有打开tom ...

好像不对吧,我查了查:8080端口同80端口,是被用于WWW代理服务的,可以实现网页浏览,经常在访问某个网站或使用代理服务器的时候,会加上“:8080”端口号,比如http://www.popob.com:8080
回复 使用道具 举报
LZ  你压缩包里居然是一个网页。。。

面朝大海,春暖花开 {:soso_e140:}

不要这么想不开。。
回复 使用道具 举报
黄玉昆 发表于 2013-3-12 11:46
可是我想自定义客户端,服务器用遨游的,或者火狐的,并且访问自己本地的那个网页,通过这方式就不行了, ...

我用ie和谷歌浏览器都可以访问到的  
你的地址是http://192.168.1.101:10003/D:/JAVA/网编/TCP/myIE.html
而且你的服务器是使用一次就关闭了 所以每次都要重新启动下服务器
回复 使用道具 举报
黄玉昆 黑马帝 2013-3-12 11:57:20
8#
曾钦 发表于 2013-3-12 11:55
LZ  你压缩包里居然是一个网页。。。

面朝大海,春暖花开

好吧,我不是有意的,按你说的,我试了试telnet,但是情况时这样的:

回复 使用道具 举报
黄玉昆 发表于 2013-3-12 11:46
可是我想自定义客户端,服务器用遨游的,或者火狐的,并且访问自己本地的那个网页,通过这方式就不行了, ...

自定义服务端  客户端用遨游或者火狐的吧  
回复 使用道具 举报
黄玉昆 发表于 2013-3-12 11:57
好吧,我不是有意的,按你说的,我试了试telnet,但是情况时这样的:

端口 telnet失败 说明可以用,没有被占用。 把Server跑起来,再telnet 一下你开启的端口。。试试
回复 使用道具 举报
本帖最后由 谢洋 于 2013-3-12 14:04 编辑

import java.io.*;
import java.net.*;
class MyIE
{
        public static void main(String[] args) throws Exception
        {
                //("192.168.1.101",8080)表示客户要连接到IP为:192.168.1.101的主机,并且连接到该主机上被8080的端口所标识的服务程序;
                //端口可以这样理解:端口是用标记机主上的某个网络服务程序,,所以服务端要能接收客户的连接,那就它绑定端口要与客户端发往那个端口一致
                Socket s = new Socket("192.168.1.101",8080);//这里的端口号不确定,不知道是不是8080
                PrintWriter out = new PrintWriter(s.getOutputStream(),true);
                out.println("GET D:/JAVA/网编/TCP/myIE.html HTTP/1.1");
                out.println("Accept:*/*");
                out.println("Accept-Language: zh-cn");
                out.println("Host: 192.168.1.101:10003");
                out.println("Connection: Keep-Alive");
                out.println();
                out.println();
                BufferedReader bufr = new BufferedReader(new InputStreamReader(s.getInputStream()));
                String line = null;
                while((line=bufr.readLine())!=null)
                {
                        System.out.println(line);
                }
                s.close();
        }
}

import java.io.*;
import java.net.*;
class Server
{
        public static void main(String[] args) throws Exception
        {
               
               ServerSocket ss = new ServerSocket(10003);//我是服器,只收接连接到10003端口的客户
                Socket s = ss.accept();
                System.out.println(s.getInetAddress().getHostAddress());
               
                InputStream in = s.getInputStream();
                byte[] b = new byte[1024];
                int len = in.read(b);
                System.out.println(new String(b,0,len));
               
                PrintWriter out = new PrintWriter(s.getOutputStream(),true);
                //out.println("客户端你好");
                out.println("<font color='red' size='7'>客户端你好</font>");
                s.close();
                ss.close();
        }
}
作一个比如吧:
如我们主机上开了两个网络程:QQ(假设端口1234) 和YY(5678)
当别人要把数据发给QQ或YY时,别人只发信息到你到主机上,那谁收好呢?这时就只好给这两程序各做一个不同的标识
然后别人把把要发往那个程序的数据就加上对应程序的标识(端口

/*
192.168.1.101
GET / HTTP/1.1
Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/x-shock
wave-flash, application/vnd.ms-excel, application/vnd.ms-powerpoint, application
/msword,
Accept-Language: zh-cn
Accept-Encoding: gzip, deflate
User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; QQDownload 7
18; .NET CLR 2.0.50727)
Host: 192.168.1.101:10003
Connection: Keep-Alive
*/

评分

参与人数 1黑马币 +12 收起 理由
黄玉昆 + 12

查看全部评分

回复 使用道具 举报
谢洋 发表于 2013-3-12 13:59
import java.io.*;
import java.net.*;
class MyIE

谢谢,因为用的不是tomcat服务器,所以只能自己定义服务端和客户端了。
回复 使用道具 举报
楼主说错了吧,你应该是自定义服务端,然后就是你的思路就有问题了,
1,你想访问的资源会返回给客户端,也就是浏览器,你也可以让他在服务端显示的,
2,你可以在服务端new一个FileStream 流,读取你的附件文件,
3,传给浏览器后再把附件传回客户端。。呵呵呵
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马