欢迎来到淘文阁 - 分享文档赚钱的网站! | 帮助中心 好文档才是您的得力助手!
淘文阁 - 分享文档赚钱的网站
全部分类
  • 研究报告>
  • 管理文献>
  • 标准材料>
  • 技术资料>
  • 教育专区>
  • 应用文书>
  • 生活休闲>
  • 考试试题>
  • pptx模板>
  • 工商注册>
  • 期刊短文>
  • 图片设计>
  • ImageVerifierCode 换一换

    Java中的TCPUDP网络通信编程.docx

    • 资源ID:60110583       资源大小:15.79KB        全文页数:17页
    • 资源格式: DOCX        下载积分:20金币
    快捷下载 游客一键下载
    会员登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录   QQ登录  
    二维码
    微信扫一扫登录
    下载资源需要20金币
    邮箱/手机:
    温馨提示:
    快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
    如填写123,账号就是123,密码也是123。
    支付方式: 支付宝    微信支付   
    验证码:   换一换

     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    Java中的TCPUDP网络通信编程.docx

    Java中的TCP/UDP网络通信编程127.0.0.1是回路地址,用于测试,相当于localhost本机地址,没有网卡,不设DNS都可以访问.端口地址在065535之间,其中01023之间的端口是用于一些知名的网络服务和应用,用户的普通网络应用程序应该使用1024以上的端口.网络应用中基本上都是TCP(Transmission Control Protocol传输控制协议)和UDP(User Datagram Protocol用户数据报协议),TCP是面向连接的通信协议,UDP是无连接的通信协议.Socket连接套接字,Java分别为TCP和UDP提供了相应的类,TCP是.ServerSocket(用于服务器端)和.Socket(用于客户端);UDP是.DatagramSocket.1,Java编写UDP网络程序1.1,DatagramSocketDatagramSocket有如下构造方法:1,DatagramSocket() :构造数据报套接字并将其绑定到本地主机上任何可用的端口。2,DatagramSocket(int port):创建数据报套接字并将其绑定到本地主机上的指定端口。3,DatagramSocket(int port, InetAddress laddr):创建数据报套接字,将其绑定到指定的本地地址。即指定网卡发送和接收数据.如果在创建DatagramSocket对象时,没有指定网卡的IP 地址,在发送数据时,底层驱动程序会自动选择一块网卡去发送,在接收数据时,会接收所有的网卡收到的与端口一致的数据.发送信息时,可以不指定端口号,接收信息时,要指定端口号,因为要接收指定的数据.发送数据使用DatagramSocket.send(DatagramPacket p)方法,接收数据使用DatagramSocket.receive(DatagramPacket p)方法.1.2,DatagramPacketDatagramPacket类有如下构造方法:1,DatagramPacket(byte buf, int length):构造 DatagramPacket,用来接收长度为length的数据包。2,DatagramPacket(byte buf, int length, InetAddress address, int port):构造数据报包,用来将长度为length的包发送到指定主机上的指定端口号。接收数据时使用第一次构造方法,发送数据时使用第二种构造方法.1.3,InetAddressJava中对IP地址进行包装的类,DatagramPacket.getAddress()可以获取发送或接收方的IP地址.DatagramPacket.getPort()可以获取发送或接收方的端口.1.4,UDP程序例子发送程序:import .DatagramPacket;import .DatagramSocket;import .InetAddress;public class UdpSend public static void main(String args) throws Exception DatagramSocket ds = new DatagramSocket();String str = "hello , world!"DatagramPacket dp = new DatagramPacket(str.getBytes(),str.length(),InetAddress.getByName("192.168.0.105"),3000);ds.send(dp);ds.close(); /关闭连接接收程序:import .DatagramPacket;import .DatagramSocket;public class UdpRecv public static void main(String args) throws Exception DatagramSocket ds = new DatagramSocket(3000);byte buf = new byte1024;DatagramPacket dp = new DatagramPacket(buf,buf.length);ds.receive(dp);String str = new String(dp.getData(),0,dp.getLength();System.out.println(str);System.out.println("IP:" + dp.getAddress().getHostAddress() + ",PORT:" + dp.getPort();ds.close();测试要先运行接收程序,再运行发送程序.如果接收程序没有接收到数据,则会一直阻塞,接收到数据后才会关闭程序.如果网络上没有数据发送过来,接收程序也没有阻塞,通常都是使用了一个已经被占用的端口.2,Java编写TCP网络程序2.1,ServerSocket编写TCP网络服务程序,首先要用到.ServerSocket类用以创建服务器Socket.它的常用构造方法有:1,ServerSocket(int port):创建绑定到特定端口的服务器套接字。2,ServerSocket(int port, int backlog):利用指定的backlog(服务器忙时保持连接请求的等待客户数量),创建服务器套接字并将其绑定到指定的本地端口号。3,ServerSocket(int port, int backlog, InetAddress bindAddr):使用指定的端口、侦听 backlog 和要绑定到的本地 IP 地址创建服务器。2.2,Socket客户端要与服务器建立连接,必须先创建一个Socket对象,它的常用构造方法有:1,Socket(String host, int port):创建一个流套接字并将其连接到指定主机上的指定端口号。2,Socket(InetAddress address, int port):创建一个流套接字并将其连接到指定 IP 地址的指定端口号。3,Socket(InetAddress address, int port, InetAddress localAddr, int localPort):创建一个套接字并将其连接到指定远程端口上的指定远程地址。4,Socket(String host, int port, InetAddress localAddr, int localPort):创建一个套接字并将其连接到指定远程主机上的指定远程端口。对于通常情况的应用,使用第1个构造方法来创建客户端的Socket对象,并与服务器建立连接,是非常简单和方便的.服务器端程序调用ServerSocket.accept方法等待客户端的连接请求,一旦accept接收了客户端连接请求,该方法返回一个与该客户端建立了专线连接的Socket对象,不用程序去创建这个Socket对象.建立了连接的两个Socket是以IO流的方式进行数据交换的,Java提供了Socket.getInputStream返回Socket的输入流对象,Socket.getOutputStream返回Socket的输出流对象.2.3,TCP程序例子的服务器程序:import java.io.InputStream;import java.io.OutputStream;import .ServerSocket;import .Socket;public class TcpServer public static void main(String args) throws Exception ServerSocket ss = new ServerSocket(8000);Socket s = ss.accept();InputStream ips = s.getInputStream();OutputStream ops = s.getOutputStream();ops.write("hello,World!".getBytes();byte buf = new byte1024;int len = ips.read(buf);System.out.println(new String(buf,0,len);ips.close();ops.close();s.close();ss.close();在这个程序里,创建了一个在8000端口上等待连接的ServerSocket对象,当接收到一个客户的连接请求后,程序从与这个客户建立了连接的Socket对象中获得输入输出流对象,通过输出流首先向客户端发送一串字符,然后通过输入流读取客户端发送过来的信息,并将这些信息打印,然后关闭所有资源.要先运行服务器程序,然后才能运行客户端程序,当TCP服务器程序运行到Socket.accpet()方法等待客户连接时,accept方法将阻塞,一直到有客户连接请求到来,该方法才会返回,如果又没有请求到来,又没有发生阻塞,通常都是使用了一个已经被占用的端口.我们可以使用windows提供的telnet工具在命令行窗口中测试一下服务器程序:命令如下:telnet localhost 8000可以看到,telnet只要有输入就发送,因此我们如果想要在服务器端一次读多个字符的话,还需要进一步处理,看如下代码:import java.io.BufferedReader;import java.io.InputStream;import java.io.InputStreamReader;import java.io.OutputStream;import .ServerSocket;import .Socket;public class TcpServer public static void main(String args) throws Exception ServerSocket ss = new ServerSocket(8000);Socket s = ss.accept();InputStream ips = s.getInputStream();BufferedReader br = new BufferedReader(new InputStreamReader(ips); /对InputStream进行包装,增加了缓存OutputStream ops = s.getOutputStream();ops.write("hello,World!".getBytes();System.out.println(br.readLine();br.close(); /关闭包装类,会自动关闭里面的基类ops.close();s.close();ss.close();再次使用telnet工具可以看到,这次可以发送不止一个字符了,按回车键后发送数据到服务器端.2,Java编写TCP网络程序2.1,ServerSocket编写TCP网络服务程序,首先要用到.ServerSocket类用以创建服务器Socket.它的常用构造方法有:1,ServerSocket(int port):创建绑定到特定端口的服务器套接字。2,ServerSocket(int port, int backlog):利用指定的backlog(服务器忙时保持连接请求的等待客户数量),创建服务器套接字并将其绑定到指定的本地端口号。3,ServerSocket(int port, int backlog, InetAddress bindAddr):使用指定的端口、侦听 backlog 和要绑定到的本地 IP 地址创建服务器。2.2,Socket客户端要与服务器建立连接,必须先创建一个Socket对象,它的常用构造方法有:1,Socket(String host, int port):创建一个流套接字并将其连接到指定主机上的指定端口号。2,Socket(InetAddress address, int port):创建一个流套接字并将其连接到指定 IP 地址的指定端口号。3,Socket(InetAddress address, int port, InetAddress localAddr, int localPort):创建一个套接字并将其连接到指定远程端口上的指定远程地址。4,Socket(String host, int port, InetAddress localAddr, int localPort):创建一个套接字并将其连接到指定远程主机上的指定远程端口。对于通常情况的应用,使用第1个构造方法来创建客户端的Socket对象,并与服务器建立连接,是非常简单和方便的.服务器端程序调用ServerSocket.accept方法等待客户端的连接请求,一旦accept接收了客户端连接请求,该方法返回一个与该客户端建立了专线连接的Socket对象,不用程序去创建这个Socket对象.建立了连接的两个Socket是以IO流的方式进行数据交换的,Java提供了Socket.getInputStream返回Socket的输入流对象,Socket.getOutputStream返回Socket的输出流对象.2.3,TCP程序例子的服务器程序:import java.io.InputStream;import java.io.OutputStream;import .ServerSocket;import .Socket;public class TcpServer public static void main(String args) throws Exception ServerSocket ss = new ServerSocket(8000);Socket s = ss.accept();InputStream ips = s.getInputStream();OutputStream ops = s.getOutputStream();ops.write("hello,World!".getBytes();byte buf = new byte1024;int len = ips.read(buf);System.out.println(new String(buf,0,len);ips.close();ops.close();s.close();ss.close();在这个程序里,创建了一个在8000端口上等待连接的ServerSocket对象,当接收到一个客户的连接请求后,程序从与这个客户建立了连接的Socket对象中获得输入输出流对象,通过输出流首先向客户端发送一串字符,然后通过输入流读取客户端发送过来的信息,并将这些信息打印,然后关闭所有资源.要先运行服务器程序,然后才能运行客户端程序,当TCP服务器程序运行到Socket.accpet()方法等待客户连接时,accept方法将阻塞,一直到有客户连接请求到来,该方法才会返回,如果又没有请求到来,又没有发生阻塞,通常都是使用了一个已经被占用的端口.我们可以使用windows提供的telnet工具在命令行窗口中测试一下服务器程序:命令如下:telnet localhost 8000可以看到,telnet只要有输入就发送,因此我们如果想要在服务器端一次读多个字符的话,还需要进一步处理,看如下代码:import java.io.BufferedReader;import java.io.InputStream;import java.io.InputStreamReader;import java.io.OutputStream;import .ServerSocket;import .Socket;public class TcpServer public static void main(String args) throws Exception ServerSocket ss = new ServerSocket(8000);Socket s = ss.accept();InputStream ips = s.getInputStream();BufferedReader br = new BufferedReader(new InputStreamReader(ips); /对InputStream进行包装,增加了缓存OutputStream ops = s.getOutputStream();ops.write("hello,World!".getBytes();System.out.println(br.readLine();br.close(); /关闭包装类,会自动关闭里面的基类ops.close();s.close();ss.close();再次使用telnet工具可以看到,这次可以发送不止一个字符了,按回车键后发送数据到服务器端.2.5,TCP程序例子客户端程序:import java.io.BufferedReader;import java.io.DataOutputStream;import java.io.InputStream;import java.io.InputStreamReader;import java.io.OutputStream;import .InetAddress;import .Socket;public class TcpClient public static void main(String args) throws Exceptionif(args.length < 2)System.out.println("Usage:java TcpClient ServerIP ServerPort");return ;Socket s = new Socket(InetAddress.getByName(args0),Integer.parseInt(args1);InputStream ips = s.getInputStream();OutputStream ops = s.getOutputStream();BufferedReader brKey = new BufferedReader(new InputStreamReader(System.in);DataOutputStream dos = new DataOutputStream(ops);BufferedReader brNet = new BufferedReader(new InputStreamReader(ips);while(true)String strWord = brKey.readLine();dos.writeBytes(strWord + System.getProperty("line.separator");if("quit".equalsIgnoreCase(strWord)break;elseSystem.out.println(brNet.readLine();dos.close();brNet.close();brKey.close();s.close();先运行服务器程序,再在命令行使用java TcpClient 192.168.0.3 8000,这样就启动了客户端程序.我们可以启动多个客户端程序.我们可以利用netstat工具来查看已经被使用的端口

    注意事项

    本文(Java中的TCPUDP网络通信编程.docx)为本站会员(飞****2)主动上传,淘文阁 - 分享文档赚钱的网站仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知淘文阁 - 分享文档赚钱的网站(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    关于淘文阁 - 版权申诉 - 用户使用规则 - 积分规则 - 联系我们

    本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

    工信部备案号:黑ICP备15003705号 © 2020-2023 www.taowenge.com 淘文阁 

    收起
    展开