socket方便了应用程序访问通讯协议TCP/IP 。

socket是作为通讯链入的端点。我们可以吧套接字看成是电话机,有了套接字,才有了通讯的工具。我们可以吧IP地址看成是电话号码,端口号看成是分机号。

1、基于TCP的socket编程。

java.net.ServerSocket是用来创建服务器端的套接字socket。

java.net.Socket是用来创建客户端的套接字socket。

InetAddress(java.net.InetAddress)类:用来表示IP地址。

凡事基于TCP创建的套接字可以叫做流套接字。

服务器端相当于一个监听器,用来监听端口。

服务器与客服端之间的通讯都是输入输出流来实现的。

服务器端代码如下:

[java] view plaincopy

  1. import java.net.*;

  2. import java.io.*;

  3. class SocketTCPServer extends Thread//让类继承为线程类

  4. {

  5. private Socket s;

  6. SocketTCPServer(Socket s)

  7. {

  8. this.s = s;

  9. }

  10. public static void main(String []args)

  11. {

  12. server();

  13. }

  14. public void run()//这个就是线程方法了

  15. {

  16. try

  17. {//当然当不想直接发送数据,就会去创建一个带缓冲的流

  18. OutputStream os=s.getOutputStream();

  19. BufferedOutputStream bos = new BufferedOutputStream(os);

  20. //os.write("my name is xuneng!".getBytes());

  21. bos.write("my name is xuneng!".getBytes());

  22. InputStream is=s.getInputStream();

  23. byte [] buf =new byte[100];//别忘了加new

  24. int len=is.read(buf);

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

  26. bos.close();

  27. is.close();

  28. os.close();

  29. s.close();

  30. }

  31. catch(Exception e)

  32. {

  33. e.printStackTrace();

  34. }

  35. }

  36. public static void server()//完成之后一定要记得关闭各种流于套接字

  37. {

  38. try

  39. {

  40. ServerSocket ss = new ServerSocket(8000);//自定义的一个端口

  41. while(true)//服务器端会老这样启动着。

  42. {

  43. System.out.println("the server is starting .......");

  44. Socket s=ss.accept();            //一直等待着接收消息

  45. new SocketTCPServer(s).start();//当接受到请求的时候,就返回一个套接字,创建一个线程

  46. }

  47. }

  48. catch(Exception e)

  49. {

  50. e.printStackTrace();

  51. }

  52. }

  53. }

客户端代码如下:

[java] view plaincopy

  1. import java.net.*;

  2. import java.io.*;

  3. class SocketTCPClient

  4. {

  5. private Socket s;

  6. SocketTCPClient(Socket s)

  7. {

  8. this.s = s;

  9. }

  10. public static void main(String []args)

  11. {

  12. client();

  13. }

  14. public static void client()

  15. {

  16. try

  17. {

  18. Socket s = new Socket(InetAddress.getByName("localhost"),8000);//端口号要一致。

  19. OutputStream os = s.getOutputStream();

  20. os.write("Hello World!".getBytes());

  21. InputStream is = s.getInputStream();

  22. byte [] buf = new byte[100];

  23. int len = is.read(buf);

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

  25. os.close();

  26. is.close();

  27. s.close();

  28. }

  29. catch(Exception e)

  30. {

  31. e.printStackTrace();

  32. }

  33. }

  34. }

2、基于UDP的socket编程。 

创建流程如下:

java.net.DatagramSocket(数据电报套接字)。

java.net.DatagramPacket(数据电报包,里面包含了发送的信息)。

基于UDP的套接字就是数据报套接字。

两个都要先构造好相应的数据包。

DatagramPacket包中的函数 intgetLength()返回实际接受的字节数, byte[]getData()返回接受到的数据。

要想接受端给发送端回信息,就需要知道发送端的IP地址InetAddress getAddress()和发送端进程所绑定的端口号int getPort()。

数据报套接字发送成功之后,就相当于建立了一个虚连接,双方可以发送数据。

发送端代码如下:

[java] view plaincopy

  1. import java.net.*;

  2. import java.io.*;

  3. /*

  4. *发送端, 相当于客户端。

  5. */

  6. class SocketUDPSend

  7. {

  8. public static void main(String[]args)

  9. {

  10. sed();

  11. }

  12. public static void sed()

  13. {

  14. try

  15. {

  16. DatagramSocket ds = new DatagramSocket();

  17. String str = "haha, my name is xuneng!";

  18. DatagramPacket dp = new DatagramPacket(str.getBytes(),0,str.length(),

  19. InetAddress.getByName("localhost"),8600);//发送给本机的地址,端口为8600

  20. ds.send(dp);

  21. //演示接受返回回来的数据。

  22. byte[] buf = new byte[100];

  23. DatagramPacket dp2 = new DatagramPacket(buf,100);//字节数组,长度

  24. ds.receive(dp2);

  25. System.out.println(new String(buf,0,dp2.getLength()));

  26. ds.close();

  27. }

  28. catch(Exception e)

  29. {

  30. e.printStackTrace();

  31. }

  32. }

  33. }

接收代码如下:

[java] view plaincopy

  1. import java.net.*;

  2. import java.io.*;

  3. /*

  4. *接受端,也就是服务器端。一直在监听端口。

  5. */

  6. class SocketUDPRecv

  7. {

  8. public static void main(String[]args)

  9. {

  10. recv();

  11. }

  12. public static void recv()

  13. {

  14. try

  15. {

  16. DatagramSocket ds = new DatagramSocket(8600);

  17. byte [] buf = new byte[100];

  18. DatagramPacket dp = new DatagramPacket(buf,100);

  19. ds.receive(dp);

  20. System.out.println(new String(buf,0,dp.getLength()));

  21. //演示给发送端返回数据,需要发送端去接受

  22. String str = "Yes , I received!";

  23. DatagramPacket dp1 = new DatagramPacket(str.getBytes(),str.length(),

  24. dp.getAddress(),dp.getPort());

  25. ds.send(dp1);

  26. ds.close();

  27. }

  28. catch(Exception e)

  29. {

  30. e.printStackTrace();

  31. }

  32. }

  33. }

转载自:http://blog.csdn.net/xn4545945

转载于:https://blog.51cto.com/amass/1563780

Java---Socket编程UDP/TCP相关推荐

  1. Java Socket编程 - 基于TCP方式的二进制文件传输【转】http://blog.csdn.net/jia20003/article/details/8248221...

    此人博客挺好的,推荐一个! 一个基于Java Socket协议之上文件传输的完整示例,基于TCP通信完成. 除了基于TCP的二进制文件传输,还演示了JAVA Swing的一些编程技巧,Demo程序 实 ...

  2. Java Socket编程 - 基于TCP方式的二进制文件传输

    一个基于Java Socket协议之上文件传输的完整示例,基于TCP通信完成. 除了基于TCP的二进制文件传输,还演示了JAVA Swing的一些编程技巧,Demo程序 实现主要功能有以下几点: 1. ...

  3. java 网络编程 UDP TCP

    网络编程 网络编程主要用于解决计算机与计算机(手机.平板..)之间的数据传输问题. 网络编程: 不需要基于html页面就可以达到数据之间的传输. 比如: feiQ , QQ , 微信.... 网页编程 ...

  4. JAVA socket编程 Datagram套接字 UDP协议(转)

      查看文章     JAVA socket编程 Datagram套接字 UDP协议 2009-05-13 09:35 1 UDP套接字 数据报(Datagram)是网络层数据单元在介质上传输信息的一 ...

  5. tcp java实例_实现了基于TCP的Java Socket编程实例代码

    实现了基于TCP的Java Socket编程,功能很简单:客户端向服务器端输出一名话"connect",服务器端接收输出到控制台并向客户端输出一名话"Hello" ...

  6. Java Socket编程----通信是这样炼成的

    转载自 Java Socket编程----通信是这样炼成的 Java最初是作为网络编程语言出现的,其对网络提供了高度的支持,使得客户端和服务器的沟通变成了现实,而在网络编程中,使用最多的就是Socke ...

  7. java socket编程心跳_Java Socket编程心跳包创建实例解析

    1.什么是心跳包? 心跳包就是在客户端和服务器间定时通知对方自己状态的一个自己定义的命令字,按照一定的时间间隔发送,类似于心跳,所以叫做心跳包. 用来判断对方(设备,进程或其它网元)是否正常运行,采用 ...

  8. Java Socket编程如何建立两者关系

    转自:http://developer.51cto.com/art/201003/190582.htm Java Socket编程需要大家详细的学习,有关的技术一直在不断的更新.那么要如何才能掌握好有 ...

  9. linux系统udp通信程序,Linux UDP socket编程(UDP通讯模型) | C/C++程序员之家

    Linux UDP socket编程(UDP通讯模型): UDPClient + UDPService. Linux下大多数网络程序都是基于TCP的,很少基于UDP,简单的通讯模型如下,开发时候备用! ...

  10. Java Socket编程详解

    Java Socket编程是Java网络编程很重要的内容,现参考了许多资料,总结如下: 1. Java网络编程原理+Socket编程 http://www.cnblogs.com/linzheng/a ...

最新文章

  1. 从零开始入门 K8s | 有状态应用编排 - StatefulSet
  2. 【⛔拒绝内卷,学会shell,走遍天下都不怕⛔】shell编程基础
  3. 深度理解Android InstantRun原理以及源码分析
  4. python飞机大战资料-Python之游戏开发-飞机大战
  5. mybatis 基础理解
  6. el-popover超过固定高度后出现滚动条_「测绘精选」RTK测量不出现固定解的原因...
  7. python操纵excel的方法_python操作Excel的几种方式
  8. 为什么有些内联(行内)元素可以设置宽高?
  9. java中连接mysql数据库_java中怎么连接mysql数据库
  10. 许家印深夜主持集团营销大会:恒大全国楼盘全线7折!
  11. 【CCCC】L3-014 周游世界 (30分),,DFS搜索最短路,路径打印
  12. Atitit.跨语言标准化 web cgi api v2 saa CGI   (通用网关接口)  编辑 CGI 是Web 服务器运行时外部程序的规范,按CGI 编写的程序可以扩展服务器功能。CG
  13. matlab直观数据处理,霍尔效应实验数据处理 [霍尔效应实验的MATLAB数据处理]
  14. C语言编程三子棋程序代码,C语言实现三子棋源代码
  15. 探究:软件工程中的test oracle到底是什么意思?
  16. python 读词向量文件
  17. 系统思考:VUCA时代下的我们应该怎么做?
  18. 聚观早报 | 苹果被曝开发16英寸iPad;5.5G已经取得关键进展
  19. 这家200多年历史的中华老字号,是如何赢得今年快手中秋月饼品牌冠军的?
  20. 布局:px to vw、vh

热门文章

  1. 万字长文解读运营商搏击5G:一场比拼财力的三国杀
  2. 2018全球最佳品牌Top25:时代巨变的一个缩影
  3. 比杠精网友更可怕的,是懂王同事
  4. 漫画 | 一台 Linux 服务器最多能支撑多少个 TCP 连接?
  5. 软件开发打败了 80 %的程序员
  6. java 和 Android Base64加密
  7. 临时表空间过大解决方法
  8. [HNOI2008]Cards
  9. 【译】MongoDb vs Mysql—以NodeJs为例
  10. vue写的简单版todolist