客服端 服务器端 (java 网络)

本文详细介绍了网络编程的基础概念,包括计算机网络连接、网络模型(OSI/TCP/IP)、通信要素(IP、端口、通信协议),重点讲解了TCP和UDP编程,以及Socket在服务器端和客户端的应用,以及UDP协议的DatagramSocket和DatagramPacket示例。
摘要由CSDN通过智能技术生成
网络编程概述
网络模型
网络通信要素:IP,端口号,通信协议
TCP编程
UDP编程

网络编程概述:

1.计算机网络:

把不同区域的计算机(广义上的),通过通信设备和线路连接起来,可以实现数据的传输和共享的系统.

实现计算机之间联系,必须有介质连接.最开始在一间办公室,后来一栋楼,一个城市,一个国家,全球

  2.网络编程是什么: 

java语言支持网络之间的传递信息,由JVM控制,并在Java里实现一个跨平台网络库

(1)网络编程的目的:

直接或间接的通过网络与其他计算机进行通讯。

(2)网络编程中存在的问题:

1.怎样准确定位网络上的主机。

2.找到主机后如何可靠高效进行数据传送。

网络模型:

osi参考模型,是一个理想化标准化模型,分为7层

实际上使用Tcp/Ip网络模型分为4层:应用层,运输层,网络层,物理链路层

网络通信要素:

Ip:

在网络世界中,是计算机的地址
局域网地址: 192.168.1.20 连接到路由器,会自动分配ip  
广域网地址: 家里的宽带 与外界连接
本机地址: 本地回环地址 127.0.0.1

端口:

是计算中运行中的程序的编号,对应的是程序
ip找主机,端口找程序
ip+端口  找到目标计算机 以及你想要的程序.
端口号0-65535之间  由于 0-1024被一些系统程序,所以我们开发的程序可以从1024-65535区间定义,但是不能与已有的端口冲突    

通信协议:

计算机网络中实现通信必须有一些约定,即通信协议,对速率、传输代
码、代码结构、 传输控制步骤、出错控制等制定标准。

传输层有两个主要的协议:

TCP:

使用Tcp协议进行数据传输前, 必须先要检测网络是否通畅, 客户端是否能连接到服务器端,
 如果能连接到,则进行数据传输,如果连接不到,会报错.

传输前采用三次握手

安全可靠,传输完毕后要释放已建立的链接,效果低

传输完毕后采用四次挥手

三次握手:(通俗易懂大白话如下:)

1.客服端给服务器端发送一个消息,看服务器端是否可以收到

2.服务器端收到消息,并向客服端也发送一个消息,看客服端是否可以收到,同时告诉客服端自己     可以收到他的消息

3.客服端向服务器端再次发送消息,告诉服务器自己可以收到他的消息

抽象用图表示:

c4031a48d9c641f1aced69c08febda68.jpeg

四次挥手(通俗易懂大白话:)

1.客服端给服务器端发送消息请求断开

2.服务器端给客服端向客服端做出一个反馈

3.服务器端把没有发完的数据全部发送给客户端

4.客户端最后再向服务端发送一个最终的断开信号

抽象用图表示:

f615abee0d4a49a4b135edc6d376d5e5.jpeg

UDP:

不需要建立连接,不可靠,发送数据结束时不用释放资源,速度快

TCP编程:

Socket:

close();关闭Socket
InputStream inputStream =socket.getInputStream();//获取与Socket相关联的字节输入流,用于从Socket中读数据
OutputStream outputStream = socket.getOutputStream();//获取与Socket相关联的字节输出流,用于向Socket中写数据。
accept();等待客户端的连接请求,返回与该客户端进行通信用的 Socket对象
package newday7;

import java.io.IOException;
import java.io.InputStream;
import java.net.ServerSocket;
import java.net.Socket;

public class wangluo {
    public static void main(String[] args) {
        //服务器端
        try {
            ServerSocket serverSocket=new ServerSocket(9999);
            System.out.println("服务器开启成功");
            Socket socket=serverSocket.accept();//监听
            System.out.println("有客户连接到服务器");

            //接受客户端发送的信息
            InputStream inputStream =socket.getInputStream();//获取与Socket相关联的字节输入流,用于从Socket中读数据
            byte[]bytes=new byte[100];
            int size=inputStream.read(bytes);
            String s=new String(bytes,0,size);
            System.out.println(s);
        } catch (IOException e) {
            e.printStackTrace();
            System.out.println("服务器开启失败");
        }

    }
}
package newday7;

import java.io.IOException;
import java.io.OutputStream;
import java.net.Socket;
import java.util.Scanner;

public class wangluo1 {
    public static void main(String[] args) {
        //客服端

        try {

                Socket  socket = new Socket("192.168.124.158", 9999);
                OutputStream outputStream = socket.getOutputStream();//获取与Socket相关联的字节输出流,用于向Socket中写数据。
                //String s="你好";
                Scanner scanner = new Scanner(System.in);
                String s = scanner.next();
                outputStream.write(s.getBytes());


        } catch (IOException e) {
            e.printStackTrace();
            System.out.println("连接服务器失败");
        }

    }
}

UDP编程

类 DatagramSocket 和 DatagramPacket 实现了基于 UDP 协议网络程序

eg:接收端:要指定监听的接口

package newday8;

import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.SocketException;

public class Receive {
    public static void main(String[] args) {
        try {
            DatagramSocket datagramSocket=new DatagramSocket(9999);
            //封装一个数据对象,
            byte[]bytes=new byte[50];
            DatagramPacket datagramPacket=new DatagramPacket(bytes,bytes.length);
            datagramSocket.receive(datagramPacket);//真正接收

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

eg:发送端:

package newday8;

import java.io.IOException;
import java.net.*;

public class Send {
    public static void main(String[] args) {
        try {
            DatagramSocket datagramSocket=new DatagramSocket();
            //负责发送数据
            byte[]bytes="12345".getBytes();
            DatagramPacket datagramPacket=new DatagramPacket(bytes,0,bytes.length, InetAddress.getByName("127.0.0.1"),9999);
            datagramSocket.send(datagramPacket);
        } catch (SocketException e) {
            e.printStackTrace();
        } catch (UnknownHostException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值