网络编程 一

1    网络编程:

 

 --网络协议TCP/IP协议

--ip地址和端口号port.

本地回路ip地址是127.0.0.1,端口号的范围为0-655350-1023是用于一些知名的网络服务和应用。

-- TCPUDP

TCP: 传输控制协议,面向连接的协议,是可靠的,连接时要经过三次握手。

 

UDP: 用户数据包协议,数据传输是不可靠的,传输效率高,可以向多个主机发送消息。

 

DatagrameSocket 用于UDP通信

 

ServerScoket用于TCP的服务器端

 

Socket 是网络编程驱动层提供给应用程序编程飞接口和一种机制,在应用程序中创建,通过一种绑定机制与驱动程序建立关系,告诉自己所对应的IPPort

 

在发送中如果没有指定ipport 系统都提供默认的ipport .

 

DatagrameSocket ,了解它的构造方法,public DatagramSocket()系统自动为它分配一个port.适合于先发送。public DatagramSocket(int port) Receive(),Send()用于发送和接收。DatagramPacketpublic DatagramPacket(byte[] buf,int length InetAddress address, int port) 适用于发送方 .可以使用getPort(),getInetAddress()可以获得发送方的portip.InetAddress类的介绍:getLocalHost()  getHostName() 返回主机名,getByName(String host)返回ip.简单的举例:package Net;

 

import java.net.*;

 

public class UDPRes {

 

 

 

    public static void main(String[] args) throws Exception {

 

      

 

       DatagramSocket dgs = new DatagramSocket(8000);

 

       byte [] bb = new byte[2048] ;

 

       DatagramPacket dp = new DatagramPacket(bb,2048);

 

       dgs.receive(dp);

 

       System.out.println(new String(dp.getData(),0,dp.getLength())+dp.getPort()+dp.getAddress());

 

    }

 

 

 

}

 

package Net;

 

 

 

import java.net.*;

 

 

 

public class UDPSend {

 

 

 

    public static void main(String[] args) throws Exception {

 

       DatagramSocket ds = new DatagramSocket();

 

       String s = "lidage,小名你好n怎么少接受了一个呢";

 

       ds.send(new DatagramPacket(s.getBytes(), s.getBytes().length,//这里要注意,这里是发送字节的个数,而不是字符串的长度 InetAddress

 

              .getByName("192.168.0.100"), 8000));

 

       ds.close();

 

    }

 

 

 

}

 

TCP 客户端程序 TCP 客户端服务的交互过程:

 

    服务器创建一个ServerSocket ,然后调用accept()等待接受,客户端创建一个Socket并和服务器连接,服务器接受到客户端的请求,并创建一个新的Socket与客户端连接,两个建立的Socket在同一个线程中,服务器到达一个新的连接请求。

package Net;

 

 

 

import java.io.IOException;

 

import java.net.*;

 

import java.io.*;

 

 

public class TCPServer {

 

 

 

    public static void main(String[] args) {

 

      

           ServerSocket ss = new ServerSocket(8001);

 

           Socket s = ss.accept();// 阻塞式方法

 

           InputStream is = s.getInputStream();

 

           OutputStream os = s.getOutputStream();

 

           os.write("huanying".getBytes());

 

           byte[] b = new byte[1024];

 

           int len = is.read(b);

 

           System.out.println(new String(b, 0, len));

 

           is.close();

 

           os.close();

 

           s.close();

 

           ss.close();

    }

 

}

 

检查端口冲突问题: 使用 netstate sa 检测。

 

 

 

TCP 网络上传替对象。ObjectInputStream ObjectOutputStream 可以从底层输入流中读取对象的类型,可以写入到底层数据流中。ObjectInputStream ObjectOutputStream来包装网络底层流。举例:package Net;

 

 

 

import java.io.Serializable;

 

 

 

public class Student implements Serializable {

 

    int id;

 

    String name;

 

  

 

 

 

    public Student(int id, String name) {

 

       this.id = id;

 

       this.name = name;

 

           }

 

}

 

package Net;

 

 

 

import java.io.*;

 

import java.net.*;

 

 

 

public class TCPClient1 {

 

 

 

    public static void main(String[] args) throws Exception {

 

   

           Socket s = new Socket("127.0.0.1", 8001);

 

           InputStream is = s.getInputStream();

 

           ObjectInputStream ois = new ObjectInputStream(is);

 

 

 

           Student stu = (Student) ois.readObject();

 

           System.out.println("id" + stu.id);

 

           System.out.println("name" + stu.name);

 

           ois.close();

 

           is.close();

 

           s.close();

 

 

    }

 

 

}

 

package Net;

 

 

 

import java.io.*;

 

import java.net.*;

 

 

 

public class TCPServer1 {

 

 

 

    /**

 

     * @param args

 

     */

 

    public static void main(String[] args)  throws  Exception{

 

       // TODO Auto-generated method stub

 

      

           ServerSocket ss = new ServerSocket(8001);

 

           Socket s = ss.accept();

 

           OutputStream ops = s.getOutputStream();

 

           ObjectOutputStream oos = new ObjectOutputStream(ops);

 

           Student st = new Student(110, "xiaoming");

 

           oos.writeObject(st);

 

            oos.close();

 

           ops.close();

 

           ss.close();

 

          }

 

 }

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值