网络编程

1、概述:

(1)通讯之前先找到对方的IP地址

(2)数据发送到对方指定的应用程序上,用“端口”为这些应用程序来标识

(3)定义通讯规则,称为“协议”

注意:默认的端口号是可以改的


2、网络编程模型:

(1)OSI参考模型

应用层

表示层

会话层

传输层

网络层

数据链路层

物理层

(2)TCP/IP模型

应用层

传输层

网际层

主机至网络层


3、通讯要素:

(1)IP地址:getHostAddress()返回主机的IP地址对象,getHostName()返回主机名

(2)端口号

(3)传输协议


4、UDP特点

(1)面向无连接

(2)数据会被封装成包,包体积有限

(3)不可靠(因为面向无连接)

(4)速度快

实际应用:聊天、视频会议、桌面共享


5、TCP特点:

(1)面向连接

(2)进行大量数据传输

(3)可靠(因为面向连接)

(4)效率低

实际应用:打电话


6、Socket编程

(1)Socket是为网络服务提供的一种机制

(2)通信俩端都有Socket

(3)网络通信其实就是Socket通信

(4)数据在俩个Socket间通过IO传输


7、UDP传输:

(1)创建UDP服务,通过DatagramSocket类

(2)确定传输数据,并将数据封装成包

(3)通过Socket服务的send()方法将已有的数据传输出去

(4)关闭资源


8、UDP接收协议:

接收端通常会指定一个端口号

(1)先创建Socket服务,通过DatagramSocket类创建

(2)通过DatagramPacket类创建数据包,用于接收发送端传输的数据包

(3)通过Socket的receive()方法来接收

(4)通过接收的数据包获取信息

(5)关闭服务


9、TCP传输:

(1)建立客户端和服务器端

(2)客户端对于的类是Socket,服务器端对于的类是ServerSocket

客户端步骤:

(1)创建Socket服务对象,指定目标主机和端口

(2)获取Socket流中的输出流

(3)关闭Socket

服务器端步骤:

(1)创建服务端的Socket服务,ServerSocket(),并监听一个端口

(2)获取连接过来的客户端对象,通过accept()方法

(3)客户端发送数据到服务器端,服务器端会获取对应的客户对象,并获取该对象的读取流来接收读取的数据,并打印

(4)关闭服务器端Socket


package org.com.internet;

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

//客户端
public class Tcp1 {

        public static void main(String[] args) throws Exception{
                // TODO Auto-generated method stub
                
                //创建客户端对象
                Socket s=new Socket("192.168.1.102",10007);
                
                //读取客户端已有的图片
                File f=new File("c:\\1.jpg");
                FileInputStream fs=new FileInputStream(f);
                
                //将客户端的数据输出到服务器端
                OutputStream out=s.getOutputStream();
                byte[] b=new byte[1024];
                int len=0;
                while((len=fs.read(b))!=-1){
                        out.write(b, 0, len);
                }
                
                //数据读取完毕
                s.shutdownOutput();
                
                //读取数据
                InputStream in=s.getInputStream();
                byte[] b1=new byte[1024];
                int len1=in.read(b1);
                System.out.println(new String(b1,0,len1));
                
                //关闭流
                fs.close();
                s.close();
                
        }

}

//服务端
class TcpServer{
        public static void main(String args[]) throws Exception{
                //创建服务器端对象
                ServerSocket ss=new ServerSocket(10007);
                
                //服务器端接收客户端发送的数据
                Socket s=ss.accept();
                
                //获取输入流
                String ip=s.getInetAddress().getHostAddress();
                System.out.println(ip);
                InputStream in=s.getInputStream();
                
                //创建上传对象路径
                File f=new File("D.jpg");
                FileOutputStream  fos=new FileOutputStream(f);
                
                //读取输入流
                byte[] b2=new byte[1024];
                int len=0;
                while((len=in.read(b2))!=-1){
                        fos.write(b2, 0, len);
                }
                
                //输出数据到客户端去
                OutputStream out=s.getOutputStream();
                out.write("上传成功".getBytes());
                
                //关闭流
                fos.close();
                ss.close();
        }
}

出现问题:
先用eclipse运行 Tcp1时,出现如下异常
Exception in thread "main" java.net.ConnectException: Connection refused: connect
        at java.net.DualStackPlainSocketImpl.connect0(Native Method)
        at java.net.DualStackPlainSocketImpl.socketConnect(Unknown Source)
        at java.net.AbstractPlainSocketImpl.doConnect(Unknown Source)
        at java.net.AbstractPlainSocketImpl.connectToAddress(Unknown Source)
        at java.net.AbstractPlainSocketImpl.connect(Unknown Source)
        at java.net.PlainSocketImpl.connect(Unknown Source)
        at java.net.SocksSocketImpl.connect(Unknown Source)
        at java.net.Socket.connect(Unknown Source)
        at java.net.Socket.connect(Unknown Source)
        at java.net.Socket.<init>(Unknown Source)
        at java.net.Socket.<init>(Unknown Source)
        at org.com.internet.Tcp1.main(Tcp1.java:13)
运行TcpServer,在运行tcp1时,出现如下异常:
192.168.1.102
Exception in thread "main" java.net.SocketException: Connection reset
        at java.net.SocketInputStream.read(Unknown Source)
        at java.net.SocketInputStream.read(Unknown Source)
        at java.net.SocketInputStream.read(Unknown Source)
        at org.com.internet.TcpServer.main(Tcp1.java:65


解决方法:

两个错误都是连接错误。tcp协议面向连结的传输机制,所以必须先有服务端才能连接成功,先运行客户端肯定失败。


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值