网络编程简单介绍与实例

网络相关概念:

Socket网络连接

 

计算机网络

     所谓计算机网络,就是把分布在不同区域的计算机与专门的外部设备用通信线路相互连接成一个规模大,而且功能强的网络系统,从而使得计算机之间可以相互传递信息,共享数据、软件等资源。

    按地理位置分为:

        局域网

        城域网

        广域网,最大的是Internet

        

 网络编程

    所谓网络编程,指的就是在同一个网络中不同机器之间的通信

    

计算机之间通信需要的条件

    IP地址

    IP地址指的是互联网地址(Internet Protocol Address ,是联网设备与互联网之间的唯一标识,在同一个网段中,IP地址是唯一的    

    IP地址是数字型的,是一个32位的二进制,通常将其分成48位的二进制数,每8位之间用圆点隔开,每个8位整数可以转换为一个0~255的十进制整数,例如:202.9.128.88

    分为IPV4IPV6

    查看IP地址的命令:ipconfig

    

    IP地址分类

A类:保留给政府结构,1.0.0.1 ~ 126.255.255.254

    B类:分配给中型企业,128.0.0.1 ~ 191.255.255.254

    C类:分配给任何需要的个人,192.0.0.1 ~ 223.255.255.254

    D类:用于组播,224.0.0.1 ~ 239.255.255.254

    E类:用于实验,240.0.0.1 ~ 255.255.255.254

    回收地址:127.0.0.1,指本地机,一般用于测试使用

    

    IP地址可以唯一的确定网络上的一个通信实体,但一个通信实体可以有多个通信程序同时提供网络服务,此时还需要使用端口

    端口

    数据的发送和接收都需要通过端口出入计算机,端口号用于唯一标识通信实体上进行网络通讯的程序,同一台机器上不能两个程序占用同一个端口

    端口号的取值范围:0~65535

    端口分类:

        公认端口:0~1023

        注册端口:1025~49151

        动态或私有端口:1024~65535

    常用端口:

        mysql3306

        oracle1521

        tomcat8080

        浏览器:80

    

 通信协议

    需要通信的设备之间需要实现相同的通信协议

    网络分层:

        物理层,数据链路层,网络层,传输层,会话层,表示层,应用层

    通信协议分类:

    传输层协议:TCPUDP

    网络层IP协议:IPV4IPV6,互联网协议

    应用层协议:HTTP

 

TCP/IPUDP概念

    TCP/IP

    Transfer Control Protocal传输控制协议

    IP Internet Protocal 网际协议

    TCP/IP特点是:保持长连接,数据传输比较稳定可靠

    TCP连接机制:三次握手机制

 

    断开连接:四次挥手机制

 

    UDP 数据报协议

        类似广播、短信,特点:快速,不可靠

        应用场景:聊天等实时性不强的程序

 

 

 

 

Socket网络连接

给予TCP/IP协议,实现长连接,可靠

应用场景:

网络游戏视频、语音通信、文件的上传下载等等

 

Java中的Socket(套接字)

实现点对点的通信

 

服务器端

ServerSocket:用于等待和获得客户端连接

创建:ServerScocketint port

port是端口号,一旦创建ServerSocket后就会对该端口进行侦听

常用方法:

Socket accept()接收连接的客户端

执行该方法时,如果没有客户端连接,就会阻塞线程,直到有客户端连接。返回值就时连接上的客户端。

void close()关闭

 

 

客户端:

Socket : 用于连接服务器端

创建:

SocketString ipint port

ip就是服务器端的ip地址

port就是服务器端侦听的端口

一旦创建了Socket对象,就建立了和服务器端的连接

常用方法:

InputStream getInputStream()

获得输入流,实现数据的读取

OutputStream getOutputStream()

获得输出流,实现数据的发送

void close()

注意:SocketIO流关闭后,Socket连接会自动关闭

 

实现:客户端连接服务器端后,给服务器端发消息

 

服务器端:

1)创建ServerSocket对象,指定端口

2)执行ServrSocketaccep方法获得客户端的连接

3)通过accept获得客户端的Socket后,调用SocketgetInputStream()方法获得输入流

4)从输入流读取数据,显示

 

客户端:

1)创建Socket对象,指定服务器ip和端口

2)获得Socket对象的输出流

 

 

任务:完成客户端向服务器端上传一个文件

 

 

 

HTTP协议:超文本传输协议

Hyper Text Transfer Protocal

属于应用层协议,基于TCP/IP协议

规定传输的双方,发送文本和接收文本的格式

应用于:浏览器上网

    服务器和客户端之间的交互

 

请求方法:

GET    参数和URL一起发送,不安全,URL的长度是有限制的

POST 参数单独发送,安全,数据长度没有限制

PUT 用于添加数据

DELETE   用于删除

TRACE 用于跟踪

OPTIONS 获得配置参数

HEAD     发送请求头,响应头

 

响应代码:

200ok

404:资源不可访问

403:没有权限

405:请求方法没有重写

500:服务器内部错误

 

HTTP的特点:

1)更加简单、快速

2)无连接:不能保持长连接

 

3)无状态

 

 

JavaHTTP连接

URL      代表网络资源的地址

创建方法:

new URL(String urlStr)

urlStr就是网址

方法:

URLConnection openConnection()  打开连接

 

HttpURLConnection          网络连接

 

方法:

InputStream getInputStream()获得输入流

OutputStream  getOutputStream()获得输出流

setConnectionTimeOout(long timeout)  设置连接超时

setRequestMethodString method)设置请求方法

setDoOutputboolean b)设置是否可以发生数据

 

disconnect()关闭

 

 实例:

客户端

import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;
import java.net.UnknownHostException;


/**
* 客户端
* @author LT
*
*/
public class MyClient {

public void connect(){
//创建Socket对象
try {
Socket socket = new Socket("10.11.60.118",Conatants.PORT);
//发消息,获得输出流
DataOutputStream outputStream = new DataOutputStream(socket.getOutputStream());
//向服务器端发消息
String msg = "服务器你好啊";
outputStream.writeUTF(msg);
//outputStream.flush();

//接收服务器端发送的消息
DataInputStream inputStream = new DataInputStream(socket.getInputStream());
System.out.println("服务器说:"+inputStream.readUTF());

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

public static void main(String[] args) {
new MyClient().connect();
}
}

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

服务器端:

import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.ObjectInputStream;
import java.net.ServerSocket;
import java.net.Socket;
import java.net.UnknownHostException;

import com.sun.imageio.spi.InputStreamImageInputStreamSpi;

import jdk.nashorn.internal.runtime.regexp.joni.ast.ConsAltNode;

/**
* 服务器端
* @author LT
*
*/
public class MyServer {

public void start(){
System.out.println("启动服务器");
//创建ServerSocket
try {
ServerSocket server= new ServerSocket(Conatants.PORT);
//死循环不断接受客户端连接
while(true){
Socket socket = server.accept();
System.out.println("获得客户端连接"+socket.getInetAddress());
//获得客户端的输入流
DataInputStream inputStream =new DataInputStream(socket.getInputStream());
//读取数据
System.out.println("客户端:"+socket.getInetAddress()+"说:"+inputStream.readUTF());

//获取客户端的输出流
DataOutputStream outputStream = new DataOutputStream(socket.getOutputStream());
//向客户端发送数据
String msg = "客户端你好啊";
outputStream.writeUTF(msg);
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}


public static void main(String[] args) {
new MyServer().start();
}
}

 

 

 

 

posted on 2019-12-02 14:06  半缘卿  阅读(701)  评论(0编辑  收藏  举报

导航