java网络编程

计算机网络:
局域网 城域网 广域网 互联网

网络分层:
减少复杂性,
OSI :
物理层
表示层
会话层
传输层
网络层
数据链路层
物理层

TCP/IP分层
应用层
传输层
网际层
网络接口

网络编程
套接字,

java.net包里

ip:网协,网络协议 具有唯一性
InetAddress 来表示IP地址
表示本机
方式1:本机ip
方式2:127.0.0.1
方式3:localhost

端口(port)
端口只能是整数 从0到65535
分类:
公认端口:某种协议服务比如80端口表示HTTP
注册端口:松散绑定了一些服务 1024到49151
动态或者私有端口:49152到65535 不应为服务分配这些端口
尽量用10000以后的(端口重复 会出错)

协议:(protocol)网络双方必须遵守的
HTTP 超文本传输协议,

URI:统一资源标识符(一个路径)
URL:统一资源定位符 (打开资源的流)

URLConnection:

编码和解码
URLEncoder编码 一种机制编码 浏览器里收索用的多
//IE的编码解码方式
//编码
String name=”hah 哈哈 12”;
String str=URLEncoder.encode(name,”GBK”);
//解码
String str1=URLDecoder.decode(str,”GBK”);
System.out.println(str);
//获取文件的编码格式
System.out.println(System.getProperty(“file.encoding”));

    //非IE编码解码
    byte[] data="dajn".getBytes("GBK");
    String str3=new String(data,"GBK");

/*******************************************
传输层协议
TCP/UDP
tcp:面向连接 传输可靠,用于传输大量数据,速度慢,建立连接耗费资源多,需要经过3次握手
package cn.bdqn.train605;

import java.io.IOException;
import java.io.PrintStream;
import java.net.Socket;
import java.net.UnknownHostException;
import java.util.Scanner;

public class ClientDemo {

/**
 * @param args
 * @throws IOException 
 * @throws Exception 
 */
public static void main(String[] args) throws Exception, IOException {
    // TODO Auto-generated method stub

    //创建客户端的连接 并指明服务端的 主机和端口
    Socket client=new Socket("localhost",8888);

    PrintStream out=new PrintStream(client.getOutputStream());
    out.println("hello");
    out.close();
    Scanner scan=new Scanner(client.getInputStream());
    System.out.println(scan.next());
    scan.close();
}

}

package cn.bdqn.train605;

import java.io.IOException;
import java.io.PrintStream;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.Scanner;

public class SeverDemo {

/**
 * @param args
 * @throws IOException 
 */
public static void main(String[] args) throws Exception {
    // TODO Auto-generated method stub

    //创建服务端 指定端口为8888
    ServerSocket server=new ServerSocket(8888);
    System.out.println("服务端准备就绪");
    while(true){
    //接受连接该服务端的客户端对象
    Socket client=server.accept();
    System.out.println(client.getInputStream());
    //获取客户端的输入流
    Scanner scan=new Scanner(client.getInputStream());
    System.out.println(scan.next());//接受消息
    PrintStream out=new PrintStream(client.getOutputStream());
    }

}

}

UDP:面向非连接,传输不可靠,用于传输少量数据(数据报包的模式),速度快(有可能丢包的情况)

分为 发送端和接受端
DatagramaSocket 发送和接受数据报包 DatagramaPacket

package cn.bdqn.train605;

import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.net.SocketException;

//接受端
public class UDPServerDemo {

public static void main(String[] args) throws Exception {
    //创建发送端对象
    DatagramSocket send=new DatagramSocket(10010);
    DatagramPacket dp=new DatagramPacket(
            "hello".getBytes(),//发送的数据
            "hello".getBytes().length,//发送数据的长度
            InetAddress.getLocalHost(),//发送的IP
            10086//端口号
            );
    send.send(dp);
    send.close();
}

}

package cn.bdqn.train605;

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

//发送端
public class UDPAcceptDemo {

public static void main(String[] args) throws Exception {
    //创建接受端对象
    DatagramSocket server=new DatagramSocket(10086);

    byte [] buffer=new byte[1024];

    DatagramPacket data=new DatagramPacket(buffer,1024);
    server.receive(data);
    String str=new String(data.getData(),0,data.getLength());
    System.out.println("发送的数据"+str);

}

}

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值