java 网络编程

1.
image.png
image.png

4.获取本地ip地址

    InetAddress ip=InetAddress.getLocalHost();
    System.out.println(ip);

}}
image.png

6.tcp:
tcp服务端:

public class TCPClient {
public static void main(String[] args) throws UnknownHostException, IOException{
    /*
     * tcp客户端的建立。
     * 思路:
     * 1.建立tcp客户端服务
     *   1.1因为是面向连接,必须有链接才可以建立通信
     *   1.2在创建客户端时,就必须明确目的的地址和端口
     * 2.一旦连接确立,就有了传输数据的通道,就可以在通道中传输数据。
     *    这个传输其实是通过流实现的,这个流就是socket io流。
     * 3.只要获取socket io中的写动作就可以将数据写到socket流中给服务端。
     * 4.关闭资源。
     *
     */
    System.out.println("客户端启动。。。");
    //1.创建客户端对象,明确目的地址和端口
    Socket s=new Socket("10.17.212.81",9999);
    
    //2.获取socket流中的输出流,将数据发送给服务端
    OutputStream out=s.getOutputStream();
    
    //3.通过输出流写数据
    out.write("注意啦 ,tcp来了".getBytes());
    //4.关闭资源
    s.close();
    
    
}
}

服务端:

public class TCPServer {
public static void main(String[] args) throws IOException{
    /*
     * 创建tcp服务端
     * 思路:
     * 1.创建socket服务端服务,服务端为让客户端可以连上,必须提供端口,监听端口。
     * 2.获取客户端对象,通过客户端的socket流和对应的客户端进行通信
     * 3.获取客户端的socket流的读取流
     * 4.读取数据并显示在服务器端
     * 5.关闭资源
     * 
     */
    System.out.println("服务端启动");
    //1.创建服务器端对象
    ServerSocket ss=new ServerSocket(9999);
    
    //2.获取客户端对象
    Socket s=ss.accept();
    String ip=s.getInetAddress().getHostAddress();//获取id对象的字符对象
    System.out.println(ip+".....connected");
    
    //3.通过客户端对象获取socket流的读取流
    InputStream in=s.getInputStream();
    byte[] buf=new byte[1024];
    int len=in.read(buf);
    String str=new String(buf, 0, len);
    System.out.println(str);
    
    s.close();
    ss.close();
    
    
}
}

先运行服务端,再运行客户端
结果:
服务端启动
客户端启动。。。
10.17.212.81.....connected
注意啦 ,tcp来了

7.TCP服务端客户端互访:

public class TCPCLient2 {

    public static void main(String[] args) throws UnknownHostException, IOException {
        // 需求:客户端发送数据给服务端,并读取服务端反馈的数据
        System.out.println("客户端2启动");
        //1.创建socket客户端
        Socket s=new Socket("10.17.212.81",8999);
        //2.获取socket输出流,写数据
        OutputStream out=s.getOutputStream();
        out.write("服务端,我来了".getBytes());
        
        //3.获取socket的读取流,读取服务端发回的数据
        InputStream in=s.getInputStream();
        byte[] buf=new byte[1024];
        
        int len=in.read(buf);
        String str=new String(buf, 0, len);
        System.out.println(str);
        
        s.close();
        
        
    }

}
public class TCPCServer2 {

    public static void main(String[] args) throws IOException {
        // 服务端收到客户端的数据并反馈数据给客户端,应答
        //1.创建服务端socket对象
        ServerSocket ss=new ServerSocket(8999);
        System.out.println("服务器端2启动。。。。");
        //2.获取客户端对象
        Socket s=ss.accept();
        String ip=s.getInetAddress().getHostAddress();//获取ip地址字符对象
        System.out.println(ip);
        
        //3.获取socket读取流
        InputStream in=s.getInputStream();
        
        byte[] buf=new byte[1024];
        int len=in.read(buf);
        String str=new String(buf,0,len);
        
        System.out.println(str);
        
        //4.给客户端反馈数据,socket输出流
        OutputStream out=s.getOutputStream();
        out.write("hh你来了".getBytes());
        
        s.close();
        ss.close();
        
        
        

    }

}

结果:


image.png

上传文本客户端:

package cn.itcast.net.tcp.uploadtext;

import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import java.io.InputStreamReader; 
import java.io.PrintWriter;
import java.net.Socket;
import java.net.UnknownHostException;

public class UploadTextClient {
public static void main(String[] args) throws UnknownHostException, IOException{
    /*
     * 上传文本端的客户端,读取本地文本数据,发送给服务端,服务端接收完毕后,回馈“上传成功”字样
     */
    System.out.println("上传文本客户端启动.....");
    //客户端socket
    Socket s=new Socket("10.17.212.81",16666);
    //1.确立数据源,本地文件 
    BufferedReader bufr =new BufferedReader(new FileReader("cilent.txt"));
    
    
    //2.确定目的,socket输出流
    PrintWriter out=new PrintWriter(s.getOutputStream(),true);
    
    String line=null;
    while((line=bufr.readLine())!=null){
        out.println(line);
    }
    //给服务端传送标记
    //out.print("over");//容易重复
    
    //使用socket的禁用输出流方法
    s.shutdownOutput();
    
    
    //3.通过socket读取获取服务端返回的数据。
    BufferedReader bufIn=new BufferedReader(new InputStreamReader(s.getInputStream())); 
    String lineIn=bufIn.readLine();
    System.out.println(lineIn);
    
    
    //4.关闭
    bufr.close();
    s.close();
    
    
}
}

服务端:

package cn.itcast.net.tcp.uploadtext;

import java.io.BufferedReader;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;

public class UploadTextServer {
    public static void main(String[] args) throws IOException{
        /*
         * 上传文本的服务端,接受文本数据,并存储到文件中,服务端接受完毕后,反馈“上传成功”字样
         */
        System.out.println("上传服务端启动....");
        
        //1.服务端对象。
        ServerSocket ss=new ServerSocket(16666);
        
        //2.获取服务端
        Socket s=ss.accept();
        String ip=s.getInetAddress().getHostAddress();
        System.out.println(ip+".....connected");
        
        //3.获取读取流,确定源,网络socket
        BufferedReader bufIn=new BufferedReader(new InputStreamReader(s.getInputStream()));
        //InputStreamReader 是字节流通向字符流的桥梁,它将字节流转换为字符流.而BufferedReader提供额外的功能
        
        //4.确定目的、文件
        PrintWriter pw=new PrintWriter(new FileWriter("server.txt"),true);
        
        //5.频繁读写
        String line=null;
        while((line=bufIn.readLine())!=null){
            pw.println(line);
        }
        
        //6.给客户端返回信息
        PrintWriter out=new PrintWriter(s.getOutputStream(),true);//一定要加true噢
        out.println("上传成功");
        
        pw.close();
        ss.close();
        s.close();
        
    }
}

注意:客户端中 的 使用socket的禁用输出流方法: s.shutdownOutput();

9.tcp上传图片
客户端

package cn.itcast.net.tcp.uploadpic;

import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.Socket;
import java.net.UnknownHostException;

public class UploadpicClient {
public static void main(String[] args) throws UnknownHostException, IOException{
    //1.创建socket流
    Socket s=new Socket("10.17.212.81",10086);
    
    File picFile=new File("1.jpg");
    
    FileInputStream fis=new FileInputStream(picFile);
    
    OutputStream out=s.getOutputStream();
    
    byte[] buf=new byte[1024];
    
    int len=0;
    while((len=fis.read(buf))!=-1){
        out.write(buf, 0, len);
    }
    
    //告诉服务端写完了
    s.shutdownOutput();
    
    InputStream in=s.getInputStream();
    byte[] bufIn=new byte[1024];
    int lenIn=in.read(bufIn);
    String str=new String(bufIn, 0, lenIn);
    System.out.println(str);
    
    fis.close();
    s.close();

    
    
}
}

服务端

package cn.itcast.net.tcp.uploadpic;

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;

public class UploadPicServer {

    public static void main(String[] args) throws IOException {
        // 服务端对象
        ServerSocket ss=new ServerSocket(10086);
        Socket s=ss.accept();
    
        
        String ip=s.getInetAddress().getHostAddress();
        System.out.println(ip+"......connected");
        
        
        InputStream in=s.getInputStream();
         
        File file = getFile("F:\\eclipse\\网络编程\\server_pic",ip);
        
        
        FileOutputStream fos=new FileOutputStream(file);
        
        byte[] buf=new byte[1024];
        int len=0;
        while((len=in.read(buf))!=-1){
            fos.write(buf, 0, len);
        }
        
        
        //回馈给客户端
        OutputStream out = s.getOutputStream();
        out.write("上传图片成功".getBytes());
        
        fos.close();
        s.close();
        ss.close();
        

    }

//重名问题解决:
    private static File getFile(String dir1, String ip) {
        File dir=new File(dir1);
        if(!dir.exists()){
            dir.mkdir();
        }
        
        int count=1;
        File file=new File(dir,ip+"("+count+").jpg");
        while(file.exists()){
            count++;
            file=new File(dir,ip+"("+count+").jpg");
        }
        return file;
    }

}

10.
TCP上传图片并发访问服务器--运用线程

客户端和9一样
服务端:

package cn.itcast.net.tcp.uploadpic;

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;

public class UploadPicServer {

    public static void main(String[] args) throws IOException {
        // 服务端对象
        ServerSocket ss=new ServerSocket(10086);
        while(true){
        Socket s=ss.accept();
    
        new Thread(new UploadPic(s)).start();//运用多线程
        
    }
    }
}

UploadPic():

public class UploadPic implements Runnable {
 private Socket s;
    
      
    public UploadPic(Socket s) {
    super();
    this.s = s;
}
    @Override
    public void run() {
        String ip=s.getInetAddress().getHostAddress();
        System.out.println(ip+"......connected");
        
        
        InputStream in;
        try {
            in = s.getInputStream();
            File file = getFile("F:\\eclipse\\网络编程\\server_pic",ip);
            
            
            FileOutputStream fos=new FileOutputStream(file);
            
            byte[] buf=new byte[1024];
            int len=0;
            while((len=in.read(buf))!=-1){
                fos.write(buf, 0, len);
            }
            
            //回馈给客户端
            OutputStream out = s.getOutputStream();
            out.write("上传图片成功".getBytes());
            
            fos.close();
            s.close();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
    private static File getFile(String dir1, String ip) {
        File dir=new File(dir1);
        if(!dir.exists()){
            dir.mkdir();
        }
        
        int count=1;
        File file=new File(dir,ip+"("+count+").jpg");
        while(file.exists()){
            count++;
            file=new File(dir,ip+"("+count+").jpg");
        }
        return file;
    }

}

常见的客户端和服务端有哪些呢?
客户端:浏览器、
服务端:Tomcat
如果请求多图片的网页,请求的次数很多,有多少资源(html文件,图片文件,css文件,js文件等)就需要请求多少次

12.URL:


image.png

13.
image.png
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 219,039评论 6 508
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,426评论 3 395
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 165,417评论 0 356
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,868评论 1 295
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,892评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,692评论 1 305
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,416评论 3 419
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,326评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,782评论 1 316
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,957评论 3 337
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,102评论 1 350
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,790评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,442评论 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,996评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,113评论 1 272
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,332评论 3 373
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,044评论 2 355

推荐阅读更多精彩内容

  • 计算机网络概述 网络编程的实质就是两个(或多个)设备(例如计算机)之间的数据传输。 按照计算机网络的定义,通过一定...
    蛋炒饭_By阅读 1,227评论 0 10
  • 1.网络编程1.1计算机网络概述网络编程的实质就是两个(或多个)设备(例如计算机)之间的数据传输。按照计算机网络的...
    任振铭阅读 427评论 0 1
  • 网络编程的概述 网络编程的实质就是用来实现网络互连的不同计算机上运行的程序间可以进行数据交换。 一.OSI网络模型...
    思念挥霍阅读 378评论 0 0
  • 1 网络编程----TCPNo24 【 public class Server { public static...
    征程_Journey阅读 1,262评论 0 4
  • 计算机网络概述 关键字:ip,域名,DNS服务器,端口在计算机网络中,现在命名IP地址的规定是IPv4协议,该协议...
    金春国_Roy阅读 227评论 0 0