[知了堂学习笔记]网络编程

网络编程:
1.什么是网络编程
连接到外面的世界
程序1———程序2
2.网络编程/网站编程
Login.jsp—–网络协议——tomcat——–LoginServlet
Java.net包

网络协议
7层模型
4层模型
TCP:传输控制协议,可靠连接(eg:打电话)
UDP:不可靠连接(eg:发短信)
IP:网络协议,提供了唯一的IP地址

网络编程:QQ通信
程序1————程序2
Ip (qq) ip(qq)

3.端口
程序在机器上的地址
4.套接字
套接字=ip+端口

这里写图片描述

5.网络编程的实现
a.客户端和服务器端传递信息

package client;

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

public class Client_1 {

    public static void main(String[] args) {
        try {
            //指定套接字
            Socket client = new Socket("127.0.0.1",5000);

            //向服务器发送东西:本质上是流的操作
            PrintWriter pw = new PrintWriter(client.getOutputStream());
            String msg = "我是客户端";
            pw.println(msg);
            pw.flush();
            //pw.close();

            //客户端接收东西
            BufferedReader br = new BufferedReader(new InputStreamReader(client.getInputStream()));
            String msg1 = br.readLine();//等待服务器端的\n
            System.out.println("客户端接收到的信息:"+msg1);
            br.close();



        } catch (UnknownHostException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}
package server;

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

public class server_1 {
    public static void main(String[] args) {
        try {
            ServerSocket server = new ServerSocket(5000);
            while(true) {
                //侦听并接收此套接字的连接,在此方法在连接传入之前一直阻塞
                //server一直在监听是否有连接到来,阻塞态,不能继续往下走
                //这个方法监听到有连接到来的时候
                //这个方法就可以往下执行,返回一个socket处理连接
                Socket socketServer = server.accept();

                //已有客户端连接上来,socketServer来处理连接
                BufferedReader br = new BufferedReader(new InputStreamReader(socketServer.getInputStream()));

                String msg = br.readLine();//server等待客户端\n
                System.out.println("服务器端得到的信息是:"+msg);

                //br.close();

                //服务器端返回东西
                PrintWriter pr = new PrintWriter(socketServer.getOutputStream());
                //String msg = "我是服务器端";
                pr.println(msg);
                pr.close();
            }
        } catch (IOException e) {
            e.printStackTrace();
        }

    }

}

b.登录的实现

package client;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.ObjectOutputStream;
import java.net.Socket;
import java.net.UnknownHostException;

import domain.User;

/**
 * 界面--service--dao(就应练到服务器去验证)
 * 
 * @author Administrator
 *
 */
public class LoginClient {

    public static void main(String[] args) {
        try {
            Socket socket = new Socket("127.0.0.1", 5000);
            //界面
            User user = new User();
            user.setName("test");
            //发送user到服务器--对象序列化
            ObjectOutputStream out = new ObjectOutputStream(socket.getOutputStream());
            out.writeObject(user);
            out.flush();
            //接收服务器结果
            BufferedReader br = new BufferedReader(new InputStreamReader(socket.getInputStream()));
            String msg = br.readLine();
            System.out.println("登录结果是:"+msg);
            br.close();

        } catch (UnknownHostException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }

    }

}
package server;

import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;

import domain.User;

public class LoginServer {

    public static void main(String[] args) {
        try {
            ServerSocket server = new ServerSocket(5000);
            while(true) {
                    Socket socket = server.accept();
                    //验证登录:得到客户端传递的User对象
                    ObjectInputStream oin = new ObjectInputStream(socket.getInputStream());
                    User user = (User) oin.readObject();

                    //---service层/dao层
                    //验证信息返回要返回客户端
                    String msg = "登录失败";
                    if("test".equals(user.getName())) {
                        msg = "登录成功";
                    }

                    PrintWriter pw = new PrintWriter(socket.getOutputStream());
                    pw.println(msg);
                    pw.close();

            }
        } catch (IOException e) {
            e.printStackTrace();
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        }

    }

}
package domain;

import java.io.Serializable;

public class User implements Serializable{

    /**
     * 
     */
    private static final long serialVersionUID = 1L;
    private int id;
    private String name;
    private String password;
    public int getId() {
        return id;
    }
    public void setId(int id) {
        this.id = id;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public String getPassword() {
        return password;
    }
    public void setPassword(String password) {
        this.password = password;
    }
    public User(int id, String name, String password) {

        this.id = id;
        this.name = name;
        this.password = password;
    }
    public User() {
        super();
    }


}

c.文件的上传
客户端想服务器端上传文件

package client;

import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.net.Socket;

public class Client_2 {

     public static void main(String[] args) throws Exception 
     { 
     //建立Socket服务 
     Socket fileLoaderSocket = new Socket("127.0.0.1", 5000); 
     //从客户端本地读取文件,并写入socket的输出流中 
     OutputStream out = fileLoaderSocket.getOutputStream(); 
     //实例化对象fileReader
     InputStream fileRead = new FileInputStream("F:\\学习计划\\学习计划.jpg"); 
     //建立数组
     byte[] buf = new byte[1024]; 
     int len = 0; 
     //判断是否读到文件末尾
     while((len=fileRead.read(buf)) != -1)
      { 
      out.write(buf, 0, len); 
      } 
     //告诉服务端,文件已传输完毕 
     fileLoaderSocket.shutdownOutput(); 
     //获取从服务端反馈的信息 
     BufferedReader in = new BufferedReader(new InputStreamReader(fileLoaderSocket.getInputStream())); 
     String serverBack = in.readLine(); 
     System.out.println(serverBack); 
     //资源关闭 
     fileLoaderSocket.close(); 
     fileRead.close(); 
     } 
}
package server;

import java.io.BufferedWriter;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.net.ServerSocket;
import java.net.Socket;

public class Server_2 {

     public static void main(String[] args) throws Exception 
     { 
     //建立服务端Socket 
     ServerSocket ss = new ServerSocket(5000); 
     //接收客户端Socket 
     Socket fileLoaderSocket = ss.accept(); 

     //打印连接信息 
     String ip = fileLoaderSocket.getInetAddress().getHostAddress(); 
     System.out.println(ip + "...conncected"); 

     //接收文件,并保存 
     InputStream in = fileLoaderSocket.getInputStream(); 
     //实例化对象fileSave
     OutputStream fileSave = new FileOutputStream("F:\\\\学习计划.jpg"); 
     //建立数组buf
     byte[] buf = new byte[1024]; 
     int len = 0; 
     //判断是否读到文件末尾
     while((len=in.read(buf)) != -1) 
      { 
      fileSave.write(buf, 0, len); 
      //刷新
      fileSave.flush(); 
      } 
     //返回文件复制情况信息 
     BufferedWriter out = new BufferedWriter(new OutputStreamWriter(fileLoaderSocket.getOutputStream())); 
     out.write("文件上传成功"); 
     //刷新
     out.flush(); 
     //资源关闭 
     ss.close(); 
     fileLoaderSocket.close(); 
     fileSave.close(); 
     } 

}

d.连接到外面的世界

package sockettest;

import java.io.IOException;
import java.io.InputStream;
import java.net.InetSocketAddress;
import java.net.Socket;
import java.util.Scanner;

public class SocketTest {

    public static void main(String[] args) {

        try {
            //1.建立一个套接字,连接给定的主机和端口,类似telnet访问
            Socket s = new Socket();
            s.connect(new InetSocketAddress("lsxk.org", 23), 10000);
            //在控制台打印socket获得的流
            InputStream inStream = s.getInputStream();//返回InputStream对象
            Scanner in = new Scanner(inStream);

            while(in.hasNextLine()) {
                String line = in.nextLine();
                System.out.println(line);
            }


        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

请关注“知了堂学习社区”,地址:http://www.zhiliaotang.com/portal.php

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值