当前位置: 首页 > news >正文

16、sockect

一、局域网因特网

  服务器是指提供信息的计算机或程序,客户机是指请求信息的计算机或程序,而网络用于连接服务器与客户机,实现两者之间的通信。但有时在某个网络中很难将服务器和客户机区分开。我们通常说的“局域网(Local Area Network  LAN)”就是一群通过一定形式连接起来的计算机。它可以由两台计算机组成,也可以由同一个区域内的上千台计算机组成。由LAN延伸到更大的范围,这样的网络称为“广域网”(Wide Area Network WAN)。我们熟悉的因特网这是由无数的LAN和WAN组成。

 

二、网络协议

  网络协议规定了计算机之间连接的物理、机械、电器等特征以及计算机之间的相互荀子规则、数据发送冲突的解决、长的数据如何分段传送与接收等。就像不同国家有不同的法律一样,目前网络协议也有多种。

  

三、端口与套接字

  端口:

  一般而言,一台计算机只有单一的连到网络的“物理连接”,所有的数据都通过此连接对内、对外送达特定的计算机。这就是端口。网络程序设计中的端口(port)并非真实的物理存在,而是一个假想的链接装置。端口被规定为一个在0~65535之间的整数。HTTP服务一般使用80端口,FTP使用21端口。加入一台计算机提供了HTTP、FTP等多种服务,那么客户机通过不同的端口来确定链接到服务器的哪项服务上。前1000个是系统的端口,其他的占其他的。

  套接字:

  网络程序中套接字(Socket)用于将应用程序与端口链接起来。套接字是一个假想的链接装置,就像插插头的设备“插座”,用于链接电器与电线。

过程:

1、建立套接字对象其中包含端口,客户端要加上要连接的服务器的IP地址;建立客户端对象,使用serversocket.accept()等待客户端连接。

2、建立文件对象(建立)

3、发送方:使用输入流,将文件或文字从硬盘读到内存中

4、发送方:使用输出流,将内存中的东西发送到了接收方

5、接收方建立套接字对象包含端口

6、接收方:使用输入流,将接收到的名字或文件或信息读取到内存中

7、接收方:使用输出流,将内存中缓存的名字,信息写到硬盘中。

8、先打开的后关闭,后打开的先关闭。

聊天器代码:

客户端代码:

PrintWriter()的作用是设置输出流和是否自动刷新输出

package com.zxc.O;
import java.io.IOException;
import java.io.PrintWriter;
import java.net.Socket;
import java.util.Scanner;
/**
 * Created by Administrator on 2018/2/8 0008.
 */
public class MyClient {
    public static void main(String[] args) {
        Socket client=null;

        try {
            client=new Socket("127.0.0.1",9081);
            PrintWriter pw=new PrintWriter(client.getOutputStream(),true);
            Scanner sc=new Scanner(System.in);
            while(sc.hasNext()){
                String line=sc.nextLine();
                pw.println(line);
            }
            sc.close();
        } catch (IOException e) {
            e.printStackTrace();
        }finally {
            try {
                client.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
}

服务器代码:

package com.zxc.O;

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

/**
 * Created by Administrator on 2018/2/8 0008.
 */
public class MyServer {
    public static void main(String[] args) {
        ServerSocket ss=null;
        Socket client=null;
        BufferedReader br=null;
        try {
            ss=new ServerSocket(9081);
            client=ss.accept();
            br=new BufferedReader(new InputStreamReader(client.getInputStream()));
            boolean flag=true;
            while(flag){
                String line=br.readLine();
                if(line.trim().equals("exit")) {
                    flag = false;
                    System.out.println("结束");
                }else{
                    System.out.println("女孩:"+line);
                }
            }
        }
        catch (IOException e) {
            e.printStackTrace();
        }finally {
            try {
                client.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }

    }
}

 

飞鸽下载文件

服务器代码:

package com.zxc.O;

import java.io.*;
import java.net.ServerSocket;
import java.net.Socket;
/**
 * Created by Administrator on 2018/2/8 0008.
 */
public class MyfileServer {
    public static void main(String[] args) {
        ServerSocket ss=null;
        Socket client=null;
        DataInputStream dis=null;
        DataOutputStream dos=null;
        try{
            ss=new ServerSocket(8213);
            File file=new File("d://456.txt");
            dis=new DataInputStream(new BufferedInputStream(new FileInputStream(file)));
            client=ss.accept();
            dos=new DataOutputStream(client.getOutputStream());
            dos.writeUTF(file.getName());
            dos.flush();
            int n;
            byte[] buffer=new byte[1024];
            while((n=dis.read(buffer))!=-1){
                dos.write(buffer,0,n);
                dos.flush();
            }
        }catch(Exception e){
            e.printStackTrace();
        }
        finally {
            try {
                dos.close();
                dis.close();
                client.close();
                ss.close();
            } catch (IOException e) {
                e.printStackTrace();
            }

        }
    }
}

客户端代码:

package com.zxc.O;

import java.io.*;
import java.net.Socket;

/**
 * Created by Administrator on 2018/2/8 0008.
 */
public class MyfileClient {
    public static void main(String[] args) {
        Socket client=null;
        DataInputStream dis=null;
        DataOutputStream dos=null;
        try{
            client=new Socket("127.0.0.1",8213);
            dis=new DataInputStream(client.getInputStream());
            String filename=dis.readUTF();
            File file=new File("e://"+filename);
            dos=new DataOutputStream(new FileOutputStream(file));
            int n=-1;
            byte []buffer=new byte[1024];
            while((n=dis.read(buffer))!=-1){
                dos.write(buffer,0,n);
            }
        }catch(Exception e){
            e.printStackTrace();
        }finally {
            try {
                client.close();
                dos.close();
                dis.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
}

 

  

转载于:https://www.cnblogs.com/television/p/8432978.html

相关文章:

  • USACO 2006 NOV Corn Fields
  • 存储快照实现原理
  • 软件需求模式阅读笔记1
  • centos6之前版本的启动流程
  • django 之 用户忘记密码的解决办法
  • 青蛙跳杯子
  • 详解mysql 获取当前日期及格式化
  • 事务、视图、索引、备份、还原
  • 软件工程——个人记录(g)
  • C语言实现的简单银行存取款程序 请输入如下数字命令
  • PyMongo官方文档翻译——VNPY
  • 裸地并查集
  • 容器组件
  • Python面向对象篇(3)-封装、多态、反射及描述符
  • Unix编码哲学
  • es6--symbol
  • ES6简单总结(搭配简单的讲解和小案例)
  • iOS编译提示和导航提示
  • iOS筛选菜单、分段选择器、导航栏、悬浮窗、转场动画、启动视频等源码
  • Java多线程(4):使用线程池执行定时任务
  • Laravel 中的一个后期静态绑定
  • Laravel深入学习6 - 应用体系结构:解耦事件处理器
  • Travix是如何部署应用程序到Kubernetes上的
  • uva 10370 Above Average
  • 服务器从安装到部署全过程(二)
  • 开源中国专访:Chameleon原理首发,其它跨多端统一框架都是假的?
  • 力扣(LeetCode)21
  • 事件委托的小应用
  • 云栖大讲堂Java基础入门(三)- 阿里巴巴Java开发手册介绍
  • 扩展资源服务器解决oauth2 性能瓶颈
  • ​低代码平台的核心价值与优势
  • (HAL库版)freeRTOS移植STMF103
  • (转)甲方乙方——赵民谈找工作
  • *(长期更新)软考网络工程师学习笔记——Section 22 无线局域网
  • .mysql secret在哪_MYSQL基本操作(上)
  • .Net IOC框架入门之一 Unity
  • .net 简单实现MD5
  • .NET 药厂业务系统 CPU爆高分析
  • /dev/VolGroup00/LogVol00:unexpected inconsistency;run fsck manually
  • @Autowired注解的实现原理
  • @ModelAttribute注解使用
  • @Not - Empty-Null-Blank
  • @SuppressWarnings(unchecked)代码的作用
  • @synthesize和@dynamic分别有什么作用?
  • [2016.7.Test1] T1 三进制异或
  • [Angular] 笔记 18:Angular Router
  • [APUE]进程关系(下)
  • [ARM]ldr 和 adr 伪指令的区别
  • [BJDCTF2020]The mystery of ip
  • [BZOJ1877][SDOI2009]晨跑[最大流+费用流]
  • [C# 网络编程系列]专题六:UDP编程
  • [C]整形提升(转载)
  • [C++] 默认构造函数、参数化构造函数、拷贝构造函数、移动构造函数及其使用案例
  • [go 反射] 进阶
  • [HackMyVM]靶场 VivifyTech