一、局域网因特网

  服务器是指提供信息的计算机或程序,客户机是指请求信息的计算机或程序,而网络用于连接服务器与客户机,实现两者之间的通信。但有时在某个网络中很难将服务器和客户机区分开。我们通常说的“局域网(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();
}
}
}
}

  

16、sockect的更多相关文章

  1. ABP(现代ASP.NET样板开发框架)系列之16、ABP应用层——数据传输对象(DTOs)

    点这里进入ABP系列文章总目录 基于DDD的现代ASP.NET开发框架--ABP系列之16.ABP应用层——数据传输对象(DTOs) ABP是“ASP.NET Boilerplate Project ...

  2. 16、Collection接口及其子接口Set和List(常用类LinkedList,ArrayList,Vector和Stack)

    16.Collection接口 Collection是最基本的集合接口,一个Collection代表一组Object,即Collection的元素(Elements).一些Collection允许相同 ...

  3. 8、16、32-BIT系列单片机区别与特点

    一.8位单片机 8031/8051/8751是Intel公司早期的产品 1.8031的特点 8031片内不带程序存储器ROM,使用时用户需外接程序存储器和一片逻辑电路373,外接的程序存储器多为EPR ...

  4. mysql数据库优化课程---16、mysql慢查询和优化表空间

    mysql数据库优化课程---16.mysql慢查询和优化表空间 一.总结 一句话总结: a.慢查询的话找到存储慢查询的那个日志文件 b.优化表空间的话可以用optimize table sales; ...

  5. PHP进制转换[实现2、8、16、36、64进制至10进制相互转换]

    自己写了一个PHP进制转换程序,一个类吧,第一次写这个东东,写这个东东,在处理文本文件时能用得到.   可以实现: 10进制转换2.8.16.36.62进制2.8.16.36.62进制转换10进制 有 ...

  6. Ansi、GB2312、GBK、Unicode(utf8、16、32)

    关于ansi,一般默认为本地编码方式,中文应该是gb编码 他们之间的关系在这边文章里描写的很清楚:http://blog.csdn.net/ldanduo/article/details/820353 ...

  7. laravel基础课程---16、数据迁移(数据库迁移是什么)

    laravel基础课程---16.数据迁移(数据库迁移是什么) 一.总结 一句话总结: 是什么:数据库迁移就像是[数据库的版本控制],可以让你的团队轻松修改并共享应用程序的数据库结构. 使用场景:解决 ...

  8. 第3节 hive高级用法:16、17、18

    第3节 hive高级用法:16.hive当中常用的几种数据存储格式对比:17.存储方式与压缩格式相结合:18.总结 hive当中的数据存储格式: 行式存储:textFile sequenceFile ...

  9. 16、生命周期-BeanPostProcessor原理

    16.生命周期-BeanPostProcessor原理 16.1 打断点运行postProcessBeforeInitialization 可以看到先执行的顺序为: applyBeanPostProc ...

随机推荐

  1. Class example in C/C++

    class Player {  private:   int health; //these are the attributes   int strength;   int agility;  pu ...

  2. void型指针

    void型指针,表示这个指针指向的内存中的数据的类型要由用户来指定. 比方内存分配函数malloc函数返回的指针就是void *型. 用户在使用这个指针的时候.要进行强制类型转换,也就是显式说明该指针 ...

  3. 使用GitHub来托管Larval框架

    每个新框架都有自己的安装方法laravel 的安装方法有一下几种: (一)   通过下载 Laravel 包安装 (1) 安装Composer  (2) 下载最新Larvel框架  https://g ...

  4. java 用JNA调用dll 参考文档

    1  Java调用C语言动态库(JNA方式):回调函数.结构体数组传参.结构体数组返回 2jna结构体数组  JNA结构体数组 3JNA调用C语言动态链接库学习实践总结 4 Java 通过 JNA 调 ...

  5. Java-MyBatis-杂项:MyBatis根据数组、集合查询

    ylbtech-Java-MyBatis-杂项:MyBatis根据数组.集合查询 1.返回顶部 1. foreach的主要用在构建in条件中,它可以在SQL语句中进行迭代一个集合.foreach元素的 ...

  6. [转]SQL Server 数据库规范

    SQL Server 数据库规范 一. 命名规范常用对象命名规范,使用帕斯卡命名法(Pascal,单词首字母大写),统一使用英文. 1. 表.英文单数名词,尽量写完整单词名称一般不超过3个英文单词都可 ...

  7. TFS源代码管理工具:

    源代码管理: 先获取最新版本,再签入.如发现错误,可以点击--源代码管理--获取特定版本撤回修改 1.签入:(要备注,测试通过后签入) 敏捷开发:(小步快跑):小部分功能开发完成测试通过后就签入 全部 ...

  8. 洛谷P4015 运输问题(费用流)

    题目描述 WW 公司有 mm 个仓库和 nn 个零售商店.第 ii 个仓库有 a_iai​ 个单位的货物:第 jj 个零售商店需要 b_jbj​ 个单位的货物. 货物供需平衡,即\sum\limits ...

  9. 使用CocoaPods更新第三方库出错的解决办法

    使用CocoaPods更新第三方库出错的解决办法 执行完pod install或pod update之后,控制台抛出以下警告信息: [!] The xx [Debug] target override ...

  10. DWZ选项卡

    <html xmlns="http://www.w3.org/1999/xhtml"> <head runat="server"> &l ...