JavaEE学习之网络编程Socket
来源:互联网 发布:网络分流器怎么连接图 编辑:程序博客网 时间:2024/05/29 16:00
l IP地址:用来唯一表示我们自己的电脑的,是一个网络标示
l 端口号: 用来区别当前电脑中的应用程序的
l UDP: 传送速度快,但是容易丢数据,如视频聊天,语音聊天
l TCP: 传送稳定,不会丢失数据,如文件的上传、下载
l UDP程序交互的流程
l 发送端
1,创建DatagramSocket对象
2,创建DatagramPacket对象,并封装数据
3,发送数据
4,释放流资源
l 接收端
1,创建DatagramSocket对象
2,创建DatagramPacket对象
3,接收数据存储到DatagramPacket对象中
4,获取DatagramPacket对象的内容
5,释放流资源
l TCP程序交互的流程
l 客户端
1,创建客户端的Socket对象
2,获取Socket的输出流对象
3,写数据给服务器
4,获取Socket的输入流对象
5,使用输入流,读反馈信息
6,关闭流资源
l 服务器端
1,创建服务器端ServerSocket对象,指定服务器端端口号
2,开启服务器,等待着客户端Socket对象的连接,如有客户端连接,返回客户端的Socket对象
3,通过客户端的Socket对象,获取客户端的输入流,为了实现获取客户端发来的数据
4,通过客户端的输入流,获取流中的数据
5,通过客户端的Socket对象,获取客户端的输出流,为了实现给客户端反馈信息
6,通过客户端的输出流,写数据到流中
7,关闭流资源
/*
* 发送端
* 1,创建DatagramSocket对象
* 2,创建DatagramPacket对象,并封装数据
* 3,发送数据
* 4,释放流资源
*/
public class UDPSend {
public static void main(String[] args) throws IOException {
//1,创建DatagramSocket对象
DatagramSocket sendSocket = new DatagramSocket();
//2,创建DatagramPacket对象,并封装数据
//public DatagramPacket(byte[] buf,int length, InetAddress address, int port)
//构造数据报包,用来将长度为length 的包发送到指定主机上的指定端口号。
byte[] buffer ="hello,UDP".getBytes();
DatagramPacket dp = new DatagramPacket(buffer, buffer.length, InetAddress.getByName("192.168.75.58"), 12306);
//3,发送数据
//public void send(DatagramPacket p)从此套接字发送数据报包
sendSocket.send(dp);
//4,释放流资源
sendSocket.close();
}
}
l UDP完成数据的接收
/*
* UDP接收端
*
* 1,创建DatagramSocket对象
* 2,创建DatagramPacket对象
* 3,接收数据存储到DatagramPacket对象中
* 4,获取DatagramPacket对象的内容
* 5,释放流资源
*/
public class UDPReceive {
public static void main(String[]args)throws IOException {
//1,创建DatagramSocket对象,并指定端口号
DatagramSocket receiveSocket =new DatagramSocket(12306);
//2,创建DatagramPacket对象,创建一个空的仓库
byte[]buffer =new byte[1024];
DatagramPacket dp =new DatagramPacket(buffer, 1024);
//3,接收数据存储到DatagramPacket对象中
receiveSocket.receive(dp);
//4,获取DatagramPacket对象的内容
//谁发来的数据 getAddress()
InetAddress ipAddress =dp.getAddress();
String ip =ipAddress.getHostAddress();//获取到了IP地址
//发来了什么数据 getData()
byte[]data =dp.getData();
//发来了多少数据getLenth()
int length =dp.getLength();
//显示收到的数据
String dataStr =new String(data,0,length);
System.out.println("IP地址:"+ip+"数据是"+dataStr);
//5,释放流资源
receiveSocket.close();
}
}
/*
* TCP 服务器端
*
* 1,创建服务器ServerSocket对象(指定服务器端口号)
* 2,开启服务器了,等待客户端的连接,当客户端连接后,可以获取到连接服务器的客户端Socket对象
* 3,给客户端反馈信息
* 4,关闭流资源
*/
public class TCPServer {
public static void main(String[] args) throws IOException {
//1,创建服务器ServerSocket对象(指定服务器端口号)
ServerSocket ss = new ServerSocket(8888);
//2,开启服务器了,等待客户端的连接,当客户端连接后,可以获取到连接服务器的客户端Socket对象
Socket s = ss.accept();
//3,给客户端反馈信息
/*
* a,获取客户端的输出流
* b,在服务端端,通过客户端的输出流写数据给客户端
*/
//a,获取客户端的输出流
OutputStream out = s.getOutputStream();
//b,在服务端端,通过客户端的输出流写数据给客户端
out.write("你已经连接上了服务器".getBytes());
//4,关闭流资源
out.close();
s.close();
//ss.close(); 服务器流 通常都是不关闭的
}
}
完成了服务器端程序的编写,接下来编写客户端程序。
/*
* TCP 客户端
*
* 1,创建客户端Socket对象,(指定要连接的服务器地址与端口号)
* 2,获取服务器端的反馈回来的信息
* 3,关闭流资源
*/
public class TCPClient {
public static void main(String[] args) throws IOException {
//1,创建客户端Socket对象,(指定要连接的服务器地址与端口号)
Socket s = new Socket("192.168.74.58", 8888);
//2,获取服务器端的反馈回来的信息
InputStream in = s.getInputStream();
//获取获取流中的数据
byte[] buffer =new byte[1024];
//把流中的数据存储到数组中,并记录读取字节的个数
int length = in.read(buffer);
//显示数据
System.out.println(new String(buffer, 0 , length) );
//3,关闭流资源
in.close();
s.close();
}
}
- JavaEE学习之网络编程Socket
- 网络编程之SOCKET编程学习笔记
- 【网络编程】之二、socket API学习
- 学习笔记之SOCKET网络编程
- linux学习之 网络socket编程
- 【网络编程】之二、socket API学习
- Python学习之网络编程Socket
- C#学习之路---Socket网络编程
- 网络编程之Socket
- 网络编程之SOCKET
- 网络编程之socket
- 网络编程之Socket编程
- Socket网络编程学习之路 第一篇-----学习感悟
- 学习笔记之SOCKET网络编程之二
- IOS学习之[深入浅出Cocoa]iOS网络编程之Socket
- Linux+javaEE学习之文件的压缩+解压缩+java网络编程
- 【网络编程】之三、socket网络编程
- 【网络编程】之三、socket网络编程
- HTML&CSS基础
- MFC基于select模型的套接字类之服务器(3)
- Coursera—machine learning(Andrew Ng)第三周编程作业
- 大数据算法课程笔记5a: fixed-parameter vertex cover
- 160个CrackMe—第一个:“You have to kill me”
- JavaEE学习之网络编程Socket
- 一、软件测试的基本概念
- python 起步- str 字符串小总结
- 欢迎使用CSDN-markdown编辑器
- shell的实现原理
- PAT A1025
- Linux存储设备的管理与分区
- 关于Android DrawerLayout的侧滑菜单的点击事件
- [JZOJ5457]项链