Socket

注意;端口号要大于1024的小于等于是系统的端口号

TCP基于链接的协议 安全性高,效率低,
UDP 非链接的协议 安全性低,效率高


image.png

TCP
发送

package com.beicai.tcp;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.net.ServerSocket;
import java.net.Socket;

/**
 * Created by wangye on 2017/5/24.
 */

public class TCPClient {
public static void main(String[] args){
  //TCP协议实现的客户端
  try {
    Socket socket = new Socket("10.114.29.204",3000);
    //跟服务器通信   发送消息
    OutputStream os = socket.getOutputStream();
    OutputStreamWriter ow = new OutputStreamWriter(os,"UTF-8");
    BufferedWriter bw = new BufferedWriter(ow);
    bw.write("服务器你好,我是客户端,向你发送消息!");
    bw.newLine();
    bw.flush();

    //接收消息
    InputStream is = socket.getInputStream();
    InputStreamReader ir = new InputStreamReader(is,"UTF-8");
    BufferedReader br = new BufferedReader(ir);
    System.out.println("客户端收到的消息:"+br.readLine());

    is.close();
    ir.close();
    br.close();
    os.close();
    ow.close();
    bw.close();
  } catch (Exception e) {
    e.printStackTrace();
  }
}
}

接收端

package com.beicai.tcp;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.net.ServerSocket;
import java.net.Socket;

/**
 * Created by wangye on 2017/5/24.
 */

public class TCPServer {
  public static void main(String[] args){
    //TCP协议的特点
    // 1、面向连接的协议(连接时三次握手,取消连接时四次握手)
    //2、  安全性高   可以传输大数据  效率低
    //TCP协议实现的Socket通信  服务端
    //通过ServerSocket   创建服务器 并指定端口号   1024以下是系统保留端口号
    try {
      ServerSocket server = new ServerSocket(3000);
      while(true){
         //接收客户端消息
        Socket socket = server.accept();
        //信息存于Socket对象中
        InputStream is = socket.getInputStream();
        InputStreamReader ir = new InputStreamReader(is,"UTF-8");
        BufferedReader br = new BufferedReader(ir);
        System.out.println("服务器收到的消息:"+br.readLine());

        //发送消息
        OutputStream os = socket.getOutputStream();
        OutputStreamWriter ow = new OutputStreamWriter(os,"UTF-8");
        BufferedWriter bw = new BufferedWriter(ow);
        bw.write("客户端你好,我是服务器,已收到你的消息!");
        bw.newLine();
        bw.flush();

        is.close();
        ir.close();
        br.close();
        os.close();
        ow.close();
        bw.close();
      }
    } catch (Exception e) {
      e.printStackTrace();
    }
  }

}

UDP
发消息

package com.beicai.udp;

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

/**
 * Created by wangye on 2017/5/24.
 */

public class UDPClient {
public static void main(String[] args){
  try {
    DatagramSocket client = new DatagramSocket();
    //发送消息   指定发送地址
    InetAddress address = InetAddress.getByName("10.114.29.204");
    int port = 9000;
    byte[] data = "服务器你好,我是UDP客户端,向你发送消息!".getBytes("UTF-8");
    DatagramPacket packet = new DatagramPacket(data,data.length,address,port);
    client.send(packet);

    //接收消息

    byte buffer[] = new byte[1024];
    DatagramPacket packet1 = new DatagramPacket(buffer,buffer.length);
    //接送客户端发送过来的数据包
    client.receive(packet1);
    System.out.println("UDP客户端:"+new String(packet1.getData(),0,packet1.getLength(),"UTF-8"));

  } catch (Exception e) {
    e.printStackTrace();
  }

}
}

接受端

package com.beicai.udp;

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

/**
 * Created by wangye on 2017/5/24.
 */

public class UDPServer {
  public static void main(String[] args){
    //UDP协议特点  面向非连接   安全性比较低,  常用于小数据的传送 效率高
    //通过UDP协议实现Socket通信  通过数据包发送消息
    try {
      DatagramSocket server = new DatagramSocket(9000);
      while(true){
        byte buffer[] = new byte[1024];
        DatagramPacket packet = new DatagramPacket(buffer,buffer.length);
        //接送客户端发送过来的数据包
        server.receive(packet);
        System.out.println("UDP服务器:"+new String(packet.getData(),0,packet.getLength(),"UTF-8"));

        //发送消息
        InetAddress address = packet.getAddress();
        int port = packet.getPort();
        byte data[] = "UDP客户端你好,我是服务器,已收到你的消息!".getBytes("UTF-8");
        DatagramPacket packet1 = new DatagramPacket(data,data.length,address,port);
        server.send(packet1);
      }
    } catch (Exception e) {
      e.printStackTrace();
    }
  }


}

你可能感兴趣的:(Socket)