javasocket编程学习笔记

wisdo的博客 wisdo的博客     2022-08-04     481

关键词:

在上一篇中,使用了 java Socket+Tcp/IP  协议来实现应用程序或客户端--服务器间的实时双向通信,本篇中,将使用 UDP 协议来实现 Socket 的通信。

1. 关于UDP

  UDP协议(用户数据报协议)是无连接的、不可靠的、无序的,速度快,进行数据传输时,首先将要传输的数据定义成数据报(Datagram),大小限制在64k,在数据报中指明数据索要达到的Socket(主机地址和端口号),然后再将数据报发送出去,Java 对UDP 协议通信提供了两个主要的类,DatagramPacket类:表示数据报包,DatagramSocket类:进行端到端通信的类。

2. 实现方法

  2.1 服务器端

  1. 创建DatagramSocket,指定端口号
  2. 创建DatagramPacket
  3. 接受客户端发送的数据信息
  4. 读取数据
//服务器端,实现基于UDP的用户登录 
//1、创建服务器端DatagramSocket,指定端口 
DatagramSocket socket =new datagramSocket(10010); 
//2、创建数据报,用于接受客户端发送的数据 
byte[] data =newbyte[1024];// 
DatagramPacket packet =newDatagramPacket(data,data.length); 
//3、接受客户端发送的数据 
socket.receive(packet);//此方法在接受数据报之前会一致阻塞 
//4、读取数据 
String info =newString(data,o,data.length); 
System.out.println("Hello,我是服务器,客户端告诉我"+info);  
//========================================================= 
//向客户端响应数据 
//1、定义客户端的地址、端口号、数据 
InetAddress address = packet.getAddress(); 
int port = packet.getPort(); 
byte[] data2 = "欢迎您!".geyBytes(); 
//2、创建数据报,包含响应的数据信息 
DatagramPacket packet2 = new DatagramPacket(data2,data2.length,address,port); 
//3、响应客户端 
socket.send(packet2); 
//4、关闭资源 
socket.close(); 

 2.2 客户端

  1. 定义发送信息
  2. 创建DatagramPacket,包含将要发送的信息
  3. 创建DatagramSocket
  4. 发送数据
//客户端 
//1、定义服务器的地址、端口号、数据 
InetAddress address =InetAddress.getByName("localhost"); 
int port =10010; 
byte[] data ="用户名:admin;密码:123".getBytes(); 
//2、创建数据报,包含发送的数据信息 
DatagramPacket packet = newDatagramPacket(data,data,length,address,port); 
//3、创建DatagramSocket对象 
DatagramSocket socket =newDatagramSocket(); 
//4、向服务器发送数据 
socket.send(packet); 
 
//接受服务器端响应数据 
//====================================== 
//1、创建数据报,用于接受服务器端响应数据 
byte[] data2 = new byte[1024]; 
DatagramPacket packet2 = new DatagramPacket(data2,data2.length); 
//2、接受服务器响应的数据 
socket.receive(packet2); 
String raply = new String(data2,0,packet2.getLenth()); 
System.out.println("我是客户端,服务器说:"+reply); 
//4、关闭资源 
socket.close(); 

 3. 注意问题   

  1. 多线程的优先级问题:根据实际的经验,适当的降低优先级,否侧可能会有程序运行效率低的情况
  2. 是否关闭输出流和输入流:对于同一个socket,如果关闭了输出流,则与该输出流关联的socket也会被关闭,所以一般不用关闭流,直接关闭socket即可
  3. 使用TCP通信传输对象,IO中序列化部分
  4. socket编程传递文件,IO流部分

 参考资料

http://www.cnblogs.com/linzheng/archive/2011/01/23/1942328.html

 

javasocket编程api基础

 Socket是Java网络编程的基础,深入学习socket对于了解tcp/ip网络通信协议很有帮助,  此文讲解Socket的基础编程。Socket用在哪里:①、主要用在进程间,②、网络间通信。文章目录如下:一、Socket通信基本示例二、消息通信优... 查看详情

redis高频面试笔记:javasocket服务端开发

在校生如果你是在校生,你应该趁着在学校的时间夯实基础(比如计算机系统、算法、编译原理等等)不要动不动去搞什么项目,你也搞不出一个让面试官很满意的项目出来,所以根本没必要在项目上面浪费... 查看详情

windows编程课程学习笔记

一.Windows程序内部运行机制--Windows编程课程学习笔记二.MFC框架程序分析--Windows编程课程学习笔记三.简单绘图--Windows编程课程学习笔记四.文本编程--Windows编程课程学习笔记五.菜单编程--Windows编程课程学习笔记六.对话框编程--Window... 查看详情

windows编程课程学习笔记

一.Windows程序内部运行机制--Windows编程课程学习笔记二.MFC框架程序分析--Windows编程课程学习笔记三.简单绘图--Windows编程课程学习笔记四.文本编程--Windows编程课程学习笔记五.菜单编程--Windows编程课程学习笔记六.对话框编程--Window... 查看详情

javasocket学习

socket服务端编写之BIO网络学习1packagecom.example.demo.bio;23importjava.io.IOException;4importjava.net.ServerSocket;5importjava.net.Socket;67/**8*@Author:Lambert9*@Date:2019-01-0700:3710*@Description:11*/12publi 查看详情

javasocket编程

申明:本文摘自:http://www.cnblogs.com/rocomp/p/4790340.htmlJava最初是作为网络编程语言出现的,其对网络提供了高度的支持,使得客户端和服务器的沟通变成了现实,而在网络编程中,使用最多的就是Socket。像大家熟悉的QQ、MSN都使用... 查看详情

javasocket编程--聊天小案例

  很久以前写过socket聊天室,都快忘完了,心血来潮又重新写一遍。服务器端:packagecom.fancy;importjava.io.BufferedReader;importjava.io.IOException;importjava.io.InputStream;importjava.io.InputStreamReader;importjava.io.OutputStream;imp 查看详情

javasocket编程

一、网络编程概述网络编程是指编写运行在多个设备(计算机)的程序,这些设备都通过网络连接起来。java.net包中J2SE的API包含有类和接口,它们提供低层次的通信细节。你可以直接使用这些类和接口,来专注于解决问题,而不... 查看详情

javasocket编程简介

#JavaTCPIp编程 其实下面几张图片就可以解释简单解释tcp-ip协议的大体流程了。###计算机网络,分组报文和协议网络是一组通过通信信道相互连接的机器组成。组与组之间通过路由器连接数据通过分组报文传递协议,传输报文... 查看详情

多线程编程学习笔记——线程同步

接上文多线程编程学习笔记-基础(一)接上文多线程编程学习笔记-基础(二)接上文多线程编程学习笔记-基础(三)      就如上一篇文章(多线程编程学习笔记-基础(三))中的示例代码十,一样如果... 查看详情

javasocket编程(li)

一、网络编程中两个主要的问题  一个是如何准确的定位网络上一台或多台主机,另一个就是找到主机后如何可靠高效的进行数据传输。在TCP/IP协议中IP层主要负责网络主机的定位,数据传输的路由,由IP地址可以唯一地确定In... 查看详情

javasocket网络编程常见异常(转)

转:https://www.cnblogs.com/qq78292959/p/5085559.html 1.java.net.SocketTimeoutException  这个异常比较常见,socket超时。一般有2个地方会抛出这个:    a.一个是connect的时候,这个超时参数由connect(SocketAddressendpoint,inttimeout)中的后者来... 查看详情

多线程编程学习笔记-基础

接上文多线程编程学习笔记-基础(一)接上文多线程编程学习笔记-基础(二)九、向线程传递参数 1.代码如下。 usingSystem;usingSystem.Collections.Generic;usingSystem.Linq;usingSystem.Text;usingSystem.Threading;//引入线程usingSystem.Diagnostics;na... 查看详情

多线程编程学习笔记——线程池

 接上文 多线程编程学习笔记——线程同步(一) 接上文多线程编程学习笔记——线程同步(二) 接上文多线程编程学习笔记——线程同步(三)       创建多线程操作... 查看详情

javasocket编程以及与linuxsocketapi关系

Socket编程(基于Linux)Socket独立于具体协议的网络编程接口,在ISO模型中,主要位于会话层和传输层之间;在通用的计算机网络五层模型中,主要位于应用层和传输层之间。LinuxSocket基本上就是BSDSocket需要使用的头文件数据类型:#in... 查看详情

javasocket编程----通信是这样炼成的

http://www.cnblogs.com/rocomp/p/4790340.htmlJava最初是作为网络编程语言出现的,其对网络提供了高度的支持,使得客户端和服务器的沟通变成了现实,而在网络编程中,使用最多的就是Socket。像大家熟悉的QQ、MSN都使用了Socket相关的技术... 查看详情

javasocket编程(代码片段)

Socket概念tcp协议全称是TransmissionControlProtocol,传输控制协议,是以字节流的方式发送数据的协议。ip全称为InternetProtocol互联网协议,tcp/ip协议在四层模型中的传输层。http、ftp、telnet(ssh)远程登录服务为应用层协议࿰... 查看详情

javasocket实现udp编程

UDP简介UDP是UserDatagramProtocol的简称,中文名是用户数据报协议,是OSI(OpenSystemInterconnection,开放式系统互联)参考模型中一种无连接的传输层协议,提供面向事务的简单不可靠信息传送服务,IETFRFC768是... 查看详情