UDP通信
>将数据及源和目的封装在数据包中,不需要建立连接
>每个数据报的大小限制在64k以内
>因为无连接,是不可靠传输。QQ输天
>不需要建立连接,速度快,效率高
UDP套接字编程:
package Socket;
import java.io.IOException;
import java.net.*;
/**
*
* @author Administrator
*需求:通过Udp转输方式,将一段文字发送出去
* 思路:
* 1、建立UdpSocket服务
* 2、提供数据,并将数据封装到数据包中
* 3、通过Socket服务功能,将数据包发出去
* 4、关闭资源
*/
public class UdpSend {
public static void main(String[] args) throws IOException {
//1、创建udp服务,通过DatagramSocket对象
DatagramSocket socket = new DatagramSocket(8888);
//2、确定数据,并封装成DatagramPacket数据包(字节数组)
byte[]data = "udp ,哥们儿来了!".getBytes();
DatagramPacket packet = new DatagramPacket(data,data.length,InetAddress.getByName("192.168.0.12"),1000);
//3、通过Socket服务将已有的数据包发送出去。通过send方法
socket.send(packet);
//4、关闭
socket.close();
}
}
/**
*
* @author Administrator
* 需求:定义一个应用程序,用于接收并处理upd数据
* 思路:
* 1、建立udpSocket服务
* 2、定义数据包
* 3、通过socket服务中的receive方法将接收到的数据存入定义好的数据包中
* 4、通过数据包对象的特有功能,将这些不同的数据提取出来
* 5、关闭资源
*/
class UdpReceive{
public static void main(String[] args) throws IOException {
//1、创建udpSocket服务 ,通常会监听一个端口
DatagramSocket socket = new DatagramSocket(1000);
//2、定义数据包,用于存储数据
byte []data = new byte[1024];
DatagramPacket packet = new DatagramPacket(data,data.length);
//3、通过receive方法将接收到的数据放到定义好的数据包中
socket.receive(packet);
//4、通过数据包中的方法获取其中的数据
String ip = packet.getAddress().getHostAddress();
String str = new String(packet.getData(),0,packet.getLength());
int port = packet.getPort();
System.out.println("ip:"+ip);
System.out.println("data:"+str);
System.out.println("port:"+port);
socket.close();
}
}
TCP通信
>建立连接,形成传输数据的通道
>在连接中进行大量数据传输
>通过三次握手建立连接,可靠传输。下载文件
>必须建立连接,效率会稍低
TCP套按字编程:
package Socket;
import java.net.*;
import java .io.*;
/**
* 需求:建立一个文本转换服务器。客户端给服务端发送文本,服务端会将文本转换成大写再返回给客户端,
* 而且客户端可以不断地进行文本转换,当客户端输入over时,转换结束。
*
*/
public class TcpDemo2 {
public static void main(String[] args) {
}
}
/**
* 客户端分析:
* 既然是操作设备上的数据,那么就可以用io技术,并按照io的操作规律来思考
* 源:键盘录入
* 目的:网络设备,网络输出流
* 而且操作的是文本数据,可以使用字符流
* 步骤:
* 1、建立服务
* 2、获取键盘录入
* 3、将数据发给服务端
* 4、获取服务端返回的大写数据
* 5、结束,关资源
* 注:都是文本数据,可以用字符流操作,同时加入缓冲提高效率
*
*/
class TcpClient2{
public static void main(String[] args) throws Exception {
Socket s = new Socket("192.168.0.6",8889);
//定义读取键盘数据的流对象
BufferedReader bufr = new BufferedReader(new InputStreamReader(System.in));
//定义目的,将数据写出到socket输出流,发给服务器端
BufferedWriter bufOut = new BufferedWriter(new OutputStreamWriter(s.getOutputStream()));
//定义一个socket读取流,读取服务器端返回的大写信息
BufferedReader bufIn = new BufferedReader(new InputStreamReader(s.getInputStream()));
String line = null;
while((line = bufr.readLine())!=null){
if("over".equals(line))
break;
bufOut.write(line);
bufOut.newLine();
bufOut.flush();
String str = bufIn.readLine();
System.out.println("Server:"+str);
}
bufr.close();
s.close();
}
}
class TcpServer2{
public static void main(String[] args) throws Exception{
ServerSocket ss = new ServerSocket(8889);
Socket s = ss.accept();
String ip = s.getInetAddress().getHostAddress();
System.out.println(ip+"connected...");
BufferedReader bf = new BufferedReader(new InputStreamReader(s.getInputStream()));
//BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(s.getOutputStream()));
PrintWriter pw = new PrintWriter(s.getOutputStream(),true);
String line = null;
while((line = bf.readLine())!=null){
System.out.println(line);
pw.println(line.toUpperCase());
//System.out.println(line);
//bw.write(line.toUpperCase());
//bw.newLine();
//bw.flush();
}
s.close();
ss.close();
}
}
/**
* 该例子出现的问题。
* 现象:客户端和服务器端都在莫名的等待
* 为什么呢?
* 因为客户端和服务器端都有阻塞式的方法readLine()。这些方法没有读到结束标记(回车符),那么
* 就会一直等待,导致两端都在等待
*
* */
分享到:
相关推荐
Java 套接字编程Java 套接字编程Java 套接字编程Java 套接字编程Java 套接字编程Java 套接字编程
Socket套接字—Java套接字编程
socket 套接字 Java 套接字 编程 socket 套接字 Java 套接字 编程 socket 套接字 Java 套接字 编程 socket 套接字 Java 套接字 编程
JAVA网络编程资料(1)-Socket套接字—Java套接字编程.chm
基于Java的Socket套接字编程 源代码
套接字编程笔记
Java套接字编程,关于java套接字的编程文档
java套接字编程java套接字编程
对于想升入了解java网络编程的同学,这是一个难得的资源,呵呵!!
Socket即套接字 java.net包的客户端Socket,服务端ServerSocket; 单线程套接字客户端和服务端的处理; 服务端多线程处理客户端套接字; 带有线程池处理客户端套接字; 不会Socket,有Java基础就能完全理解Socket...
java编程-socket-套接字-网络编程.docx
JAVA网络编程学习资料以及源代码Socket套接字网络协议;JAVA网络编程学习资料以及源代码Socket套接字网络协议
用java编写的简单的局域网QQ 用的是socket编程 java.net.*;
Socket套接字—Java套接字编程(上1)
线程同步与异步套接字编程 线程同步与异步套接字编程线程同步与异步套接字编程
Java套接字实现网络编程之基础篇.doc
基于Java语言的流式套接字编程探析.pdf
Java演示创建SSL套接字及HTTPS协议,使用8080端口创建一个ServerSocket对象,也就是服务器套接字,返回缺省的SocketFactory对象,接受客户端的一个连接,并返回Hello,world.生成PrintWriter对象,用于输出信息。
用java语言编写的web server 套接字编程,深入理解http协议及web服务器的实验原理