黑马程序员——Java基础——网络编程02

第一讲  TCP的应用

使用TCP客户端上传图片:

  1 /*使用TCP客户端上传图片
  2  * 注:单线程的服务端有个举行性:当A客户客户端连接上一行,被服务端获取,B客户必须等待
  3  *     那么为了可以让多个客户端同时并发访问服务器,最后服务短短将每个客户端封装一个单独的线程中
  4  *
  5  * 定义线程的方法
  6  * 只有明确了每一个客户端要在服务端执行的代表。就将该代码存入run()方法中
  7  */
  8 import java.io.*;
  9 import java.net.*;
 10 //客户端
 11 class TCp {
 12     public static void main(String[] args)throws Exception{
 13 //    一下是判断文件用的,其实应该写在服务端比较好
 14 //        对传入的值进行判断
 15         if(args.length!=1){
 16             System.out.println("请指定一个图片");
 17             return;
 18         }
 19
 20         File file=new File(args[0]);
 21 //        对文件路径进行判断
 22         if(!(file.exists()&&file.isFile())){
 23             System.out.println("你上传的文件有问题,或不存在");
 24             return;
 25         }
 26 //        判断文件大小
 27         if(file.length()>1024*1024){
 28             System.out.println("文件太大");
 29             return;
 30         }
 31 //        判断后缀
 32         if(!file.getName().endsWith(".jpg")){
 33             System.out.println("图片格式错误");
 34             return;
 35         }
 36 //    创建服务
 37         Socket s=new Socket("localhost",8888);
 38         FileInputStream fis=new    FileInputStream(file);
 39
 40         OutputStream out=s.getOutputStream();
 41
 42         BufferedReader in =
 43                 new BufferedReader(new InputStreamReader(s.getInputStream()));
 44         byte[] buf=new byte[1024];
 45
 46         int len=0;
 47         while((len=fis.read(buf))!=-1){
 48
 49             out.write(buf,0,len);
 50         }
 51     //    结束标记
 52         s.shutdownInput();
 53     //    反馈信息
 54         String info = in.readLine();
 55         System.out.println(info);
 56         fis.close();
 57         s.close();
 58     }
 59 }
 60 //服务端
 61 class Server{
 62     public static void main(String[] args)throws Exception{
 63
 64         ServerSocket ss=new ServerSocket(8888);
 65         while(true){
 66             Socket s=ss.accept();
 67 //            每进入一个客户就执行的线程
 68             new Thread(new PisThread(s)).start();
 69         }
 70     }
 71 }
 72 //利用对现场实现并上传
 73
 74 class PisThread implements Runnable{
 75     private Socket s ;
 76     PisThread(Socket s){
 77         this.s=s;
 78     }
 79 //复写run
 80     public void run() {
 81         int count=1;//计数器
 82         String IP=s.getInetAddress().getHostAddress();
 83
 84         try {
 85             System.out.println(IP+"~~`connected");
 86 //            文件保存路径
 87             File dir=new File("D:\\ttt\\");
 88
 89             File file=new File(dir,IP+"tt.txt");
 90 //            判断文件是否存在
 91             while(file.exists()){
 92                 file=new File(dir,IP+"("+(count++)+").jpg");
 93             }
 94 //            数据写入
 95             FileOutputStream fos=new FileOutputStream(file);
 96             byte[] buf=new byte[1024];
 97             int len=0;
 98             while((len=in.read(buf))!=-1){
 99
100                 fos.write(buf,0,len);
101             }
102 //            反馈信息
103             OutputStream out =s.getOutputStream();
104             out.write("上传成功".getBytes());
105
106             fos.close();
107             s.close();
108         } catch (Exception e) {
109             throw new RuntimeException("上传失败");
110         }
111
112     }
113
114 }

二、客户端并发登陆

  客户端键盘录入用户名,服务端对这个用户名进行校验。

  如果该用户名存在,服务端现象XX,已登录;并在客户端显示,xx欢迎光临

  如果用户不存在,在服务端显示xxx,尝试登陆,并在客户端显示xxx,该用户名不存在

 1 //练习:用户登录
 2 import java.io.*;
 3 import java.net.*;
 4 //客户端
 5 class LoginCilent {
 6     public static void main(String[] args)throws Exception{
 7         Socket s=new Socket("localhost",8888);
 8         BufferedReader bufr=
 9                 new BufferedReader(new InputStreamReader(System.in));
10 //        输出数据
11         PrintWriter pout=new PrintWriter(s.getOutputStream(),true);
12
13         BufferedReader bufin=
14                 new BufferedReader(new InputStreamReader(s.getInputStream()));
15         String line=null;
16 //        三次登录
17         for(int x=0;x<3;x++){
18             line=bufr.readLine();
19             if(line==null){
20                 break;
21             }
22 //            搞出去
23             pout.println(line);
24             String info=bufin.readLine();//读取信息
25             System.out.println(info);
26             if(info.contains("欢迎")){
27                 break;
28             }
29         }
30         bufr.close();
31         s.close();
32     }
33 }
34 //服务端
35
36 class LoginServer{
37
38     public static void main(String[] args)throws Exception{
39         ServerSocket ss=new ServerSocket(8888);
40
41         while(true){
42
43             Socket s=ss.accept();
44
45             new Thread(new LoginThread(s)).start();
46         }
47
48     }
49 }
50
51 //线程端
52 class LoginThread implements Runnable{
53     private Socket s;
54     LoginThread(Socket s){
55         this.s=s;
56     }
57     public void run(){
58 //        获得IP
59         String IP=s.getInetAddress().getHostAddress();
60         System.out.println(IP+"~`connected");
61         try {
62             for(int i=0;i<3;i++){
63                 BufferedReader in=//读取获得的信息
64                         new BufferedReader(new InputStreamReader(s.getInputStream()));
65     //            读取自己数据库的信息
66                 BufferedReader brin=
67                         new BufferedReader(new FileReader("ttt.txt"));
68     //            读取获得的数据和数据库对比
69                 String line=in.readLine();
70                 if(line==null){//客户端没有发生数据,跳出循环
71                     break;
72                 }
73                 String data=null;
74                 boolean flag=false;
75                 while((data=in.readLine())!=null){
76                     if(data.equals(line)){
77                         flag=true;
78                         break;
79                     }
80
81                 }
82 //                将数据输出
83                 PrintWriter out=new PrintWriter(s.getOutputStream(),true);
84                 if(flag){
85                     System.out.println(line+",已登录");
86                     out.print(line+"欢迎光临");
87                 }else{
88                     System.out.println(line+",尝试登录失败");
89                     out.print(line+",用户名不存在");
90                 }
91             }
92             s.close();
93         } catch (Exception e) {
94             throw new RuntimeException("用户名登录失败");
95         }
96
97     }
98
99 }

URL和URLConnection

1、URL:

  URI:范围更大,条形码也包含于此范围

  URL:范围下,即域名

方法:

  1)构造函数:URL(protocal,host,port,file)

  2)String  getProtocol():获取协议名称

  3)Stirng  getHost();获取主机名

  4)int  getPort():获取端口

  5)String  getFile():获取URL文件名

  6)Stirng  getPath():获取URL的路径部分

  7) Stirng  getQuety():获取URL的查询部

2、URLConnection使用步骤  

  1)URL  Connection openConnection():用URL调用此方法,返回URLconnection对象

  2)INputStream getInputStream():获取输入流

  3)OutputStream getOutputStream():获取输出流

 1 import java.io.*;
 2 import java.awt.*;
 3 import java.awt.event.*;
 4 import java.net.*;
 5
 6 class myIEGUiDemo {
 7 //    各组件
 8     private Frame f;
 9     private Button but,bok;
10     private TextField tf;
11     private TextArea ta;
12 //    构造函数
13     myIEGUiDemo(){
14         init();
15     }
16 //    实现组件功能
17     private void init() {
18         f=new Frame("我的IE");
19         but=new Button("跳转");
20         tf=new TextField(50);
21         ta=new TextArea(20,60);
22
23     //    基本设置
24         f.setBounds(300,10,500,500);
25         f.setLayout(new FlowLayout());
26 //        添加组件
27         f.add(tf);
28         f.add(but);
29         f.add(ta);
30 //        窗体事件
31         myEvent();
32
33         f.setVisible(true);
34     }
35 //    注册事件
36     private void myEvent() {
37 //        窗体关闭
38         f.addWindowListener(new WindowAdapter(){
39             public void windowClosing(WindowEvent e){
40                 System.exit(0);
41             }
42         });
43 //        跳转事件
44         but.addActionListener(new ActionListener() {
45
46             public void actionPerformed(ActionEvent e0) {
47 //                在文本域中显示内容
48                 showFile();
49
50             }
51         });
52
53 //        文本框事件
54         tf.addKeyListener(new KeyAdapter(){
55             public void keyPressed(KeyEvent ex){
56 //                键盘按下回车
57                 if(ex.getKeyCode()==KeyEvent.VK_ENTER){
58                     showFile();
59                 }
60             }
61         });
62     }
63 //    网页显示
64     private void showFile(){
65 //        刷空
66         ta.setText("");
67         String path=tf.getText();//获得输入路径
68         try {
69 //            路径封装为地址对象URL的对象url
70             URL url=new URL(path);
71 //            URL的对象通过openConnection连接网页并返回URLConnection的对象有点象Socket
72             URLConnection conn=url.openConnection();
73
74 //            读取流,用于读取服务器返回数据
75             InputStream in=conn.getInputStream();
76
77             byte[] buf=new byte[1024*1024];
78
79             int len=in.read(buf);
80 //            显示在文本域
81             ta.append(new String(buf,0,len));
82
83         } catch (Exception e) {
84             throw new RuntimeException("连接失败");
85         }
86     }
87
88     public static void main(String[] args){
89         new myIEGUiDemo();
90     }
91 }

域名解析:

host应用:可屏蔽一些恶意网站,即将对应的映射关系写在hosts中,将IP地址改为本机的回环地址,那么会直接找到hosts,就不会讲请求发送出去了

 

时间: 2024-10-05 00:58:35

黑马程序员——Java基础——网络编程02的相关文章

黑马程序员——java基础---网络编程

------Java培训.Android培训.iOS培训..Net培训.期待与您交流! ------- 一.网络通讯 概念:网络间数据的传输.交互. 三要素:IP地址.端口号.传输协议. ——>IP地址 1.网络中设备的标识 2.单纯的IP地址不易记忆,可用主机名替代. 3.如果本机上没有配置任何IP地址的情况下,本机默认的IP地址为127.0.0.1 本地回环地址:127.0.0.1  主机名:localhost 用处:检验本机网卡是否运行正常等. ——>端口号 概念:用于标识进程的数字称为

黑马程序员——JAVA基础-网络编程-TCP

------Java培训.Android培训.iOS培训..Net培训.期待与您交流! ------- TCP传输 两个端点的建立连接后会有一个传输数据的通道,这通道称为流,而且是建立在网络基础上的流,称之为socket流.该流中既有读取,也有写入. tcp的两个端点:一个是客户端,一个是服务端. 客户端:对应的对象,Socket 服务端:对应的对象,ServerSocket TCP客户端: ①:建立tcp的socket服务,最好明确具体的地址和端口.这个对象在创建时,就已经可以对指定ip和端口

黑马程序员——Java基础——网络编程

第一讲 网络概述 1.网络通信三要素:电脑IP地址.软件本地端口号.网络间传输协议(国际通用的TIP/IP,还有很多其他的) 小知识:-ping 127.0.0.7可以测试网卡用 2.网络模型图列: 用户在运用层发出的数据,经过逐层打包后通过物理层传输到另一个模型中,然后逐层分解,找到端口,被另一个用户获得 IP地址:InetAddress• 网络中设备的标识• 不易记忆,可用主机名• 本地回环地址:127.0.0.1 主机名:localhost 使用java.net包中的InetAddress

黑马程序员----java基础--网络编程

------Java培训.Android培训.iOS培训..Net培训.期待与您交流! ------- 一.  网络参考模型  1.OSI参考模型和 TCP/IP 参考模型 七层描述: (1). 物理层:主要定义物理设备标准,如网线的接口类型.光纤的接口类型.各种传输介质的传输速率等.它的主要作用是传输比特流. (2). 数据链路层:主要将从物理层接收的数据进行MAC地址(网卡的地址)的封装与解封装.这一层工作的设备是交换机,数据通过交换机来传输. (3). 网络层:主要将下层接收到的数据进行I

黑马程序员——java高新技术——网络编程

点击打开链接 点击打开链接 点击打开链接 android培训.<a">点击打开链接 点击打开链接 java培训.期待与您交流!">点击打开链接 点击打开链接 网络编程 网络模型 l   OSI参考模型 l   TCP/IP参考模型 网络通讯要素 l   IP地址:网络中设备的标识,不易记忆,可用主机名,本地回环地址,127.0.0.1  主机名:localhost l   端口号:用于标识进程的逻辑地址,不同进程的标识,有效端口:0~65535,其中0~1024系统使

黑马程序员_JAVA UDP网络编程学习笔记

一.UDP网络编程概述 采用TCP协议通信时,客户端的Socket必须先与服务器建立连接,连接建立成功后,服务器端也会持有客户端连接的Socket,客户端的Socket与服务器端的Socket是对应的,它们构成了两个端点之间的虚拟通信链路.与TCP通信不同,UDP是面向无连接的.不可靠的基于数据包的传输协议.即应用进程(或程序)在使用UDP协议之前,不必先建立连接.自然,发送数据结束时也没有连接需要释放.因此,减少了开销和发送数据之前的延时.UDP也采用端口来区分进程. 在java中,java.

黑马程序员——Java基础---IO(下)

黑马程序员——Java基础---IO(下) ------<a href="http://www.itheima.com" target="blank">Java培训.Android培训.iOS培训..Net培训</a>.期待与您交流! ------ 一.概述 Java除了基本的字节流.字符流之外,还提供了File类.properties类.打印流.序列流等和输入输出相关的类,它们能够帮助我们更好的处理信息.下面将对它们进行简单的介绍. 一.正

黑马程序员——Java基础---集合框架工具类

黑马程序员——Java基础<a href="http://www.itheima.com" target="blank">Java培训.Android培训.iOS培训..Net培训</a>.期待与您交流! ------ 一.概述 Java为操作Set.List和Map提供了一系列工具类,主要有Collections和Arrays.这两个工具类的特点:类中的方法都是静态的,不需要创建对象,直接使用类名调用即可.Collections:是集合对象

黑马程序员——java基础——多线程

 黑马程序员--java基础--多线程 ------Java培训.Android培训.iOS培训..Net培训.期待与您交流! ------- 进程:是一个正在执行中的程序.每一个进程执行都有一个执行顺序.该顺序是一个执行路径,或者叫一个控制单元. 线程:就是进程中的一个独立的控制单元.线程在控制着进程的执行.一个进程中至少有一个线程. 一个进程至少有一个线程在运行,当一个进程中出现多个线程时,就称这个应用程序是多线程应用程序,每个线程在栈区中都有自己的执行空间,自己的方法区.自己的变量.