简单知识
IP
每台设备在网络中的唯一标识
端口
每个程序上在设备上的唯一标识
·MySQL:3306
·Oracle:1521
·Web:80
·Tomcat:8080
·QQ:4000
协议
UDP
面向无连接,数据不安全,速度快;
TCP(三次握手):面向连接,数据安全,速度慢;
案例
案例一 TCP发信息
class TcpClint1 {
public static void main(String[] args) throws IOException {
//1.创建一个Socket客户端对象,绑定IP和端口
Socket socket = new Socket("localhost", 8998);
//2.获取网络字节输出流OutputStream对象
OutputStream out = socket.getOutputStream();
//3.给服务器发送数据
out.write("哈漏哇!妮能煞累呀?".getBytes());
//4.获取网络字节输入流对象InputStream对象
InputStream in = socket.getInputStream();
//5.读取服务器回写的数据
byte[] arr = new byte[1024];
int len = in.read(arr);
System.out.println(new String(arr,0,len));
//6.释放资源
socket.close();
}
}
/**
* TCP服务器端:接收客户端请求,给客户端回写数据
*/
class TcpServer {
public static void main(String[] args) throws IOException {
// 1.创建服务端Socket对象并绑定客户端端口
ServerSocket serverSocket = new ServerSocket(8998);
// 2.获取客户端 socket 对象
Socket accept = serverSocket.accept();
// 3.获取网络字节输入流对象InputStream对象
InputStream in = accept.getInputStream();
// 4.读取发送过来的数据
byte[] arr = new byte[1024];
int len = in.read(arr);
System.out.println(new String(arr,0,len));
// 5.获取网络字节输出流OutputStream对象
OutputStream out = accept.getOutputStream();
// 6.给客户端回写信息
out.write("俺听不懂方言,谢谢!".getBytes());
out.close();
in.close();
}
}
案例二 UDP发信息
class UdpClint{
public static void main(String[] args) throws IOException {
int port = 8998;
//发送内容
String str = "俺是个没有感情的粉刷匠!";
//创建接收/发送器对象
DatagramSocket socket = new DatagramSocket();
//创建装载对象
DatagramPacket packet = new DatagramPacket(
str.getBytes(),
str.getBytes().length,
InetAddress.getByName("localhost"),
port);
//发送
socket.send(packet);
//socket.close();
}
}
class UdpServer{
public static void main(String[] args) throws IOException {
int port = 8998;
//创建接收/发送对象并绑定接收端口
DatagramSocket socket = new DatagramSocket(port);
//创建加载对象(构造用于接收长度为的数据包的数据包。长度参数必须小于或等于buf.length。)
DatagramPacket packet = new DatagramPacket(new byte[1024], 1024);
//接收信息
socket.receive(packet);
//打印出来
int len = 0;
byte[] arr = packet.getData();
System.out.println(new String(arr,0,len));
//socket.close();
}
}
案例三 TCP上传文件
class TcpClint {
public static void main(String[] args) throws IOException {
// 要上传的文件
String src = "like.gif";
// 创建本地字节输入流
FileInputStream fin = new FileInputStream(src);
Socket socket = new Socket("127.0.0.1", 777);
//**********************************上传*****************************************************
OutputStream os = socket.getOutputStream();
int len = 0;
byte[] arr = new byte[1024];
while ((len = fin.read(arr)) != -1) {
os.write(arr, 0, len);
}
socket.shutdownOutput();
//-------------------------------------下载服务器传过来的反馈数据---------------------------------
/*
InputStream in = socket.getInputStream();
while ((len = in.read(arr)) != -1) {
System.out.println(new String(arr, 0, len));
}*/
os.close();
socket.close();
fin.close();
}
}
/**
* 服务端代码:文件下载到服务器上
*/
class TcpServershangchuan {
public static void main(String[] args) throws IOException {
// 存储路径
String mdd = "C:\\Users\\ASUS\\Desktop\\";
// 绑定端口
ServerSocket serverSocket = new ServerSocket(777);
// 获取接收对象
Socket socket = serverSocket.accept();
// 获取网络字节输入流
InputStream in = socket.getInputStream();
// 本地字节输出流把文件下载下来
FileOutputStream fout = new FileOutputStream(mdd + "b.gif");
// IO操作
int len = 0;
byte[] arr = new byte[1024];
while ((len = in.read(arr)) != -1) {
fout.write(arr, 0, len);
}
// 返回给服务端一个信息可以不给
// socket.getOutputStream().write("上传成功".getBytes());
// 资源释放
fout.close();
socket.close();
serverSocket.close();
}
}
网友评论