商务合作:179001057@qq.com

Socket 2 FLash

技术2022-05-11  0


某平台价值19860元的编程课程资料免费领取【点我领取】


Socket可以理解为网络编程的接口,既然是网络传输,就至少有两端,一个Server,一个Client,当然这个划分也很模糊,有时候Server和Client也可以相互转化.总之Socket就是实现了数据在Server和Client间的互相流动. 目前至少有两种基于协议的Socket,TCP/IP Socket和 UDP Socket 1,UDP协议相对简单一些,直接把要发送的数据通过Socket API进行打包如package,并send即可 2,TCP Socket复杂一点,因为她要通过三次握手协议,只有确定另外一端已经连接上Socket,她才发送数据    比如在Server端,建立一个ServerSocket,并且设置处于监听状态Listening,当Client端的Socket启动,并且试图   connectServer的时候,Server才做出响应并发送数据流 当然你可能认为Socket很好理解,那么要你写一个完整的Socket又如何呢?实际上有很多的源码,已经写好了的 我也不太喜欢理论型的技术,而且也懒的总结,所以还是直接把源码列出来,有别人的,也有我自己的.当然代码是肯定经过我测试通过的 我自己在单机上测试的时候是直接启动一个MyEclipse,一个Eclipse,分别做为两端,查看端口的时候可以在命令行输入:netstat -a 来看是否打开端口或者端口是否被监听和占用 首先来UDP的(UDP的有些兼容性的问题,不过有时候不失为一种选择) 服务器端: import java.io.*; import java.net.*; public class Srv12 extends Thread { DatagramSocket ServerSocket; public Srv12() {     super("FortuneServer1");   try   {    ServerSocket = new DatagramSocket(9528);    System.out.println("FortuneServer up and running...");   }   catch (SocketException e)   {    System.err.println("Exception: couldn't create datagram socket");    System.exit(1);   } } public static void main(String[] args) {   Srv12 server = new Srv12();   server.start(); } public void run() {   if (ServerSocket == null)    return;   while (true)   {    try    {     InetAddress address;     int port;     DatagramPacket packet; byte[] data = new byte[128];     String ss;     packet = new DatagramPacket(data, data.length);         ServerSocket.receive(packet);                    //如果1114端口没有请求到数据,就一直停留在这里等待数据接收                    //如果接收到数据,则将数据包放在packet对象中,并在下面对其解析     address = packet.getAddress();     port = packet.getPort();          ss=new String(data);     System.out.println(ss);     /*FileWriter fw = new FileWriter("Fortunes.txt");//创建新文件              PrintWriter out = new PrintWriter(fw);                  for(int i=0;i<data.length;i++){         out.print(data[i]+"  ");        }     out.close();              System.out.println("Data has been writen to destination!");*/          //再次创建数据包,发送到接收的数据的端口     packet = new DatagramPacket(data, data.length, address, port);     ServerSocket.send(packet);     System.out.println("Respond has been made!");    }    catch (Exception e)    {     System.err.println("Exception: " + e);     e.printStackTrace();    }   } } }  

客户端: import java.net.*; public class Client12 { public static void main(String args[]) {   Client12 client = new Client12();   System.out.println(client.getMessage()); } public String getMessage() {   String fortune;   try {    DatagramSocket socket;    DatagramPacket packet;    byte[] data = new byte[128];       for(int i=0;i<data.length;i++){     Integer integer=new Integer(i);     data[i]=integer.byteValue();    }       socket = new DatagramSocket();    //packet = new DatagramPacket(data, data.length,InetAddress.getByName("127.0.0.1"), 1114);    packet = new DatagramPacket(data, data.length,InetAddress.getLocalHost(), 10000);    System.out.println("AAAAA");    socket.send(packet);       packet = new DatagramPacket(data, data.length);    socket.receive(packet);    fortune = new String(packet.getData());    socket.close();   } catch (UnknownHostException e) {    System.err.println("Exception: host could not be found");    return null;   }   catch (Exception e) {    System.err.println("Exception: " + e);    e.printStackTrace();    return null;   }   return fortune; } } UDP就是把数据打包到packet,由于她是包传输,不同于TCP Socket字符串的直接传输,所以接受端必须也以包格式接受才行,据此可以推出她的兼容性


最新回复(0)