Socket网络编程

网络编程的概念:
网络编程从大的方面说就是对信息的发送到接收,中间传输为物理线路的作用,编程人员可以不用考虑……
网络编程最主要的工作就是在发送端把信息通过规定好的协议进行组装包,在接收端按照规定好的协议把包进行解析,从而提取出对应的信息,达到通信的目的!中间最主要的就是数据包的组装,数据包的过滤,数据包的捕获,数据包的分析,当然最后再做一些处理!
网络编程三要素:
 A:IP地址  B:端口  C:协议
什么是Socket:
Socket的底层机制复杂,Java平台提供了一些简单的API,可以更简单有效的使用Socket开发而无需了解底层机制
Socket套接字 :
是网络上具有唯一标识的IP地址和端口号组合在一起才能构成唯一能识别的标识符套接字。
socket实现的原理机制:
1、通信的两端都有Socket
2、网络通信其实就是Socket间的通信
3、数据在两个Socket间通过IO传输
Socket网络编程一般可以分成如下步骤进行:

服务器端流程:
1、创建服务器套接字---分配内存、初始化
2、服务器套接字--侦听
3、建立与客户端配套的客户端套接字
4、与客户端通讯(可以多客户端)
5、关闭、销毁服务器端相应套接字
public static void main(String[] args) throws Exception {
        DatagramSocket ds=new DatagramSocket(10661);

        byte[] bys = new byte[1024];
        int len = bys.length;
        DatagramPacket dp = new DatagramPacket(bys, len);

        ds.receive(dp);

        byte[] by = dp.getData();
        int length = dp.getLength();

        InetAddress address = dp.getAddress();
        String ip = address.getHostAddress();

        String s = new String(by, 0, length);
        System.out.println(ip + "---" + s);

    ds.close();

    }
------模拟用户登录-----
public static void main(String[] args) throws Exception {
		DatagramSocket ds=new DatagramSocket();
		BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
		String line="s";
		byte [] bys=line.getBytes();
		int num=bys.length;
		InetAddress address=InetAddress.getByName("192.168.60.217");

		int port=10661;
		DatagramPacket dp=new DatagramPacket(bys,num, address,port);

		ds.send(dp);		
		ds.close();
	}

  客户端:
1、创建客户端套接字---分配内存、初始化
2、连接服务器
3、与服务器通讯
4、关闭、销毁客户端套接字

客户咨询问题

------服务端------

public static void main(String[] args) throws Exception {
        // TODO Auto-generated method stub
        //1.创建对象
                ServerSocket sk=new ServerSocket(11101);
                //2.监听
                Socket s=sk.accept();
                //打包数据
                BufferedReader br=new BufferedReader(new InputStreamReader(s.getInputStream()));    
                BufferedReader bw=new BufferedReader(new InputStreamReader(System.in));
                OutputStream os=s.getOutputStream();
                String line=null;
                while((line=br.readLine())!=null){
                    System.out.println("Client 	"+line);        
                    
                    os.write(bw.readLine().getBytes());
                }            
                //释放资源
                s.close();
                //sk.close();

    }

---------客户端----------

public static void main(String[] args) throws Exception, Exception {
        // TODO Auto-generated method stub
        Socket sk=new Socket("192.168.60.217",11101);
        BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
        BufferedWriter bw=new BufferedWriter(new OutputStreamWriter(sk.getOutputStream()));
        String line=null;
        while((line=br.readLine())!=null){            
            bw.write(line);
            bw.newLine();
            bw.flush();
            
            InputStream is=sk.getInputStream();            
            byte [] by=new byte[1024];
            int num=is.read(by);
            String h=new String(by, 0, num);
            System.out.println("Service:	"+h);
        }                    
            //br.close();
            //bw.close();
            sk.close();
    }

UDP和TCP的区别

TCP---传输控制协议,提供的是面向连接、可靠的字节流服务。当客户和服务器彼此交换数据前,必须先在双方之间建立一个TCP连接,之后才能传输数据。TCP提供超时重发,丢弃重复数据,检验数据,流量控制等功能,保证数据能从一端传到另一端。
TCP是面向连接的,有比较高的可靠性

UDP---用户数据报协议,是一个简单的面向数据报的运输层协议。UDP不提供可靠性,它只是把应用程序传给IP层的数据报发送出去,但是并不能保证它们能到达目的地。由于UDP在传输数据报前不用在客户和服务器之间建立一个连接,且没有超时重发等机制,故而传输速度很快

原文地址:https://www.cnblogs.com/fkx1/p/8686772.html