java-Socket定义解释

       Socket是网络驱动层提供给应用程序编程的接口和一种机制。我们可以认为Socket是应用程序创建的一个港口码头,应用程序只要把装着货物的集装箱(在程序中就是要通过网络发送的数据)放到港口码头上,就算完成了货物的运送,剩下的工作就有货运公司去处理了(在计算机中由驱动程序来充当货运公司)。

       

        对于接收方来说,应用程序也要创建一个港口码头,然后就一直等待到该码头的货物到达,最后宠码头上取走货物(发给该应用程序的数据)。

 

        Socket在应用程序中创建,通过一种绑定机制与驱动程序建立关系,告诉自己所对应的IP和Port。此后,应用程序送给Socket 数据,由 Socket 交给驱动程序向网络上发送出去。计算机服务端从网络上收到与该 Socket 绑定的 IP+Port 相关的数据后,由驱动程序交给 Socket,应用程序便可从该Socket 中提取接收到的数据。网络应用程序就是这样通过Socket进行数据的发送与接收的。

 

 

 java-Socket定义解释_第1张图片

 

 


java-Socket定义解释_第2张图片
 

 

package com.java.DataGamesocket;

import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.net.SocketException;
import java.net.UnknownHostException;
/**
 * UDP(user datagram protocol:用户数据报协议)实例
 * 负责发送数据类
 * @author songlailiang
 *
 */
public class Udpsend {

 private static DatagramSocket ds;

 public static void main(String[] args) {
  send();
 }
 
 public static void send(){
  try {
   ds = new DatagramSocket();        //创建DatagramSocket对象,用于UDP发送或接收数据
   String str = "您好,hello word!";
   DatagramPacket dp = new DatagramPacket(str.getBytes(), //创建发送包对象,
     str.getBytes().length,       //这里最好不要写成str.length,因为如果发送的内容是汉字,一个汉字占用2个字节,接收的时候可能会造成数据接收不全
     InetAddress.getByName("192.168.1.164"), 12345); //设置接收的IP和端口
   ds.send(dp);           //发送数据
  } catch (SocketException e) {
   System.out.println("new DatagramSocket()执行异常");
   e.printStackTrace();
  }catch (UnknownHostException e) {
   System.out.println("new DatagramPacket()执行异常");
   e.printStackTrace();
  } catch (IOException e) {
   System.out.println("ds.send(dp)执行异常");
   e.printStackTrace();
  }finally{
   ds.close();            //关闭socket通道,释放资源
  }
 }
}

 

 

************************************************************************************************

 

 

package com.java.DataGamesocket;

import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.net.SocketException;
import java.net.UnknownHostException;
/**
 * UDP(用户数据报协议)实例,负责接收数据类
 * 测试时,要先运行接收程序,再运行发送程序,否则接收不到数据。
 * @author
 *
 */
public class UdpResive {

 private static DatagramSocket ds;
 public static void main(String[] args) {
  resive();
 }

 private static void resive() {
  try {
   ds = new DatagramSocket(12345);       //创建DatagramSocket对象,用于UDP发送或接收数据,指定接收端口
   byte[] buf = new byte[1024];
   DatagramPacket dp = new DatagramPacket(buf , 1024);  //创建接收数据包对象,限定最大是1024个字节
   ds.receive(dp);           //接收数据
   String strresive=new String(dp.getData(),0,dp.getLength())+
     " from "+dp.getAddress().getHostAddress()+":"+dp.getPort();
   System.out.println(strresive);
  } catch (SocketException e) {
   e.printStackTrace();
  } catch (IOException e) {
   e.printStackTrace();
  }finally{
   ds.close();      //关闭socket通道,释放资源
  }
 }
 
 public static void send(){
  try {
   ds = new DatagramSocket();        //创建DatagramSocket对象,用于UDP发送或接收数据
   String str = "您好,hello word!";
   DatagramPacket dp = new DatagramPacket(str.getBytes(), //创建发送包对象,
     str.getBytes().length,       //这里最好不要写成str.length,因为如果发送的内容是汉字,一个汉字占用2个字节,接收的时候可能会造成数据接收不全
     InetAddress.getByName("192.168.1.164"), 12345); //设置接收的IP和端口
   ds.send(dp);           //发送数据
  } catch (SocketException e) {
   System.out.println("new DatagramSocket()执行异常");
   e.printStackTrace();
  }catch (UnknownHostException e) {
   System.out.println("new DatagramPacket()执行异常");
   e.printStackTrace();
  } catch (IOException e) {
   System.out.println("ds.send(dp)执行异常");
   e.printStackTrace();
  }finally{
   ds.close();            //关闭socket通道,释放资源
  }
 }
 
}

你可能感兴趣的:(java-Socket定义解释)