目录
1.网络编程三要素:
1.IP地址
static InetAddress getByName(String host)//确定主机名称的IP地址。
String getHostName()//获取此IP地址的主机名
String getHostAddress()//返回文本显示中的IP地址字符串
2.端口: 标识设备中的应用程序
3.协议:计算机在连接和通讯时要遵循的规则
2.UDP网络发送端步骤:
1.建立发送数据对象:
DatagramSocket()//构造数据报套接字并将其绑定到本地主机上的任何可用端口。
2.将数据打包:
DatagramPacket(byte[] buf, int length, InetAddress address, int port)
//构造用于发送长度的分组的数据报包 length指定主机上到指定的端口号。
3.发送数据:
void send(DatagramPacket p)//从此套接字发送数据报包。
4.关闭资源:
void close() //关闭此数据报套接字。
3.UDP网络接收端步骤:
1.建立接受数据对象:
DatagramSocket(int port)//构造数据报套接字并将其绑定到本地主机上的指定端口。
2.将数据打包:
DatagramPacket(byte[] buf, int length)//构造一个 DatagramPacket用于接收长度的数据包 length
3.接收数据:
void receive(DatagramPacket p) //从此套接字接收数据报包。
4.整理数据:
byte[] getData() //返回数据缓冲区。
5.关闭资源
4.TCP客户端步骤:
1.建立发送数据对象:
Socket(InetAddress address, int port) //创建流套接字并将其连接到指定IP地址的指定端口号。
2.获取输入流,读取数据,获取输出流,写数据
1. BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(s.getOutputStream()));
2. BufferedReader br = new BufferedReader(new FileReader("myNet\\s.txt"));
BufferedWriter bw = new BufferedWriter(new FileWriter("itheima\\myNet\\a.txt"));
3.定义结束标记:
void shutdownOutput() //禁用此套接字的输出流。
4.获取输入流,接收服务器的反馈:
BufferedReader br1 = new BufferedReader(new InputStreamReader(s.getInputStream()));
5.关闭资源
5.TCP接收端步骤:
1.建立接受数据对象:
ServerSocket(int port) //创建绑定到指定端口的服务器套接字。
2.建立监听对象:
Socket accept() //侦听要连接到此套接字并接受它
3.获取输入流,读取数据,获取输出流,写数据
1. BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(s.getOutputStream()));
2. BufferedReader br = new BufferedReader(new FileReader("myNet\\s.txt"));
BufferedWriter bw = new BufferedWriter(new FileWriter("itheima\\myNet\\a.txt"));
4.获取输出流,写数据,给予反馈:
BufferedWriter bw1 = new BufferedWriter(new OutputStreamWriter(s.getOutputStream()));
5.关闭资源
6.相关案例:
UDP练习1:
1.需求:
发送端:数据来自于键盘输入,知道输入数据为886时,发送数据结束
接收端:因为接收端不知道发送端什么时候停止发送,故采用死循环。
2.代码实现:
1.发送端:
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
public class udpsendDemo {
public static void main(String[] args) throws IOException {
DatagramSocket ds = new DatagramSocket();
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String line;
while((line = br.readLine())!=null){
if(line.equals("886")) {
break;
}
byte[] bys = line.getBytes();
DatagramPacket dp = new DatagramPacket(bys,bys.length, InetAddress.getByName("172.24.164.227"),10086);
ds.send(dp);
}
ds.close();
}
}
2.接收端:
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
public class udpreceiveDemo {
public static void main(String[] args) throws IOException {
DatagramSocket ds = new DatagramSocket(10086);
while(true){
byte[]bys = new byte[1024];
DatagramPacket dp = new DatagramPacket(bys, bys.length);
ds.receive(dp);
int length = dp.getLength();
byte[] datas = dp.getData();
String data = new String(datas,0,length);
System.out.println("数据是:"+data);
}
}
}
3.运行结果:
1.发送端:
2.接收端:
TCP练习1:
1.需求:
客户端:数据来自键盘输入,知道输入的数据是886,发送结束
服务器:接收到的数据在控制台输出
2.代码实现:
1.客户端:
import java.io.*;
import java.net.Socket;
public class ClientDemo {
public static void main(String[] args) throws IOException {
Socket s = new Socket("172.24.164.227",10086);
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(s.getOutputStream()));
String line;
while((line = br.readLine())!=null){
if(line.equals("886")){
break;
}
// byte[]bys = line.getBytes();
// OutputStream os = s.getOutputStream();
// os.write(bys);
bw.write(line);
bw.newLine();
bw.flush();
}
s.close();
}
}
2.服务器:
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.ServerSocket;
import java.net.Socket;
public class ServerDemo {
public static void main(String[] args) throws IOException {
ServerSocket ss = new ServerSocket(10086);
Socket s = ss.accept();
BufferedReader br = new BufferedReader(new InputStreamReader(s.getInputStream()));
String line;
while((line = br.readLine())!=null){
System.out.println(line);
}
ss.close();
}
}
3.运行结果
1.客户端:
2.服务器:
TCP练习2:
1.需求:
客户端:数据来自于文件,接收服务器的反馈
服务器:接受到的数据写入文本文件,给出反馈
2.代码实现:
1.客户端:
import java.io.*;
import java.net.Socket;
public class ClientDemo {
public static void main(String[] args) throws IOException {
Socket s = new Socket("172.24.164.227",10086);
BufferedReader br = new BufferedReader(new FileReader("myNet\\s.txt"));
BufferedWriter bw = new BufferedWriter(new FileWriter("myNet\\a.txt"));
String line;
while((line = br.readLine())!=null){
bw.write(line);
bw.newLine();
bw.flush();
}
//定义结束标记
s.shutdownOutput();
// System.out.println(11111);
// InputStream is = s.getInputStream();
BufferedReader br1 = new BufferedReader(new InputStreamReader(s.getInputStream()));
String line1;
while((line = br1.readLine())!=null){
System.out.println("客户端收到的数据是:"+line);
}
br.close();
bw.close();
br1.close();
s.close();
}
}
2.服务器:
import java.io.*;
import java.net.ServerSocket;
import java.net.Socket;
public class ServerDemo {
public static void main(String[] args) throws IOException {
ServerSocket ss = new ServerSocket(10086);
Socket s = ss.accept();
BufferedReader br = new BufferedReader(new FileReader("myNet\\s.txt"));
BufferedWriter bw = new BufferedWriter(new FileWriter("myNet\\a.txt"));
String line;
while((line = br.readLine())!=null){//等待读取数据
bw.write(line);
bw.newLine();
bw.flush();
}
// System.out.println(22222);
BufferedWriter bw1 = new BufferedWriter(new OutputStreamWriter(s.getOutputStream()));
String line1 = "数据已上传成功!";
bw1.write(line1);
bw.close();
br.close();
bw1.close();
ss.close();
}
}
3.运行结果
总结:
以上内容属于自学,可能不是很全面,但为了方便日后的观看和复习,在此发文,如发现有错误请联系博主,欢迎指正。