UDP网络编程: 主动发送请求的一方为客户端
DatagramSocket-->客户端/服务器端(被动接受请求的一端) 服务器端要有一个固定的端口号
DatagramPacket-->几个重要的方法send()发送消息 recieve() 接收消息
TCP编程(主流):
服务器端创建:ServerSocket 客户端创建:Socket
读取消息:BufferedReader Buffered(缓冲区):高效的收发消息,联想菜鸟驿站 写入消息:BufferedWritter
TCP既有发送缓冲区,也有接收缓冲区。UDP只有接受缓冲区,没有发送缓冲区。这也是他们的区别。
实现自己的HTTP服务器:
实现自定义的HTTP服务器的关键是:
遵循HTTP协议——> request:1.首行(方法类型 uri HTTP版本号)
2.head
3.空行
4.body
response : 1.首行(HTTP版本号 状态码 状态描述符)
2.head (ContentType:text/html ContentLength:xx字节大小)
3.空行
4.返回信息
import java.io.*;
import java.net.ServerSocket;
import java.net.Socket;
//自定义HTTP服务器
//根据uri内容返回不同的信息,如果uri中包含了404,则给浏览器输出未找到此页面,包含200,返回你好,世界!
public class MyHTTP {
//端口号
public static final int port=9004;
public static void main(String[] args) throws IOException {
//1.创建一个TCP服务器
ServerSocket serverSocket=new ServerSocket(port);
System.out.println("服务器已启动");
//2.等待客户端连接
Socket socket=serverSocket.accept();
//3.构建读写对象
try(BufferedReader reader=new BufferedReader(
new InputStreamReader(socket.getInputStream()));
BufferedWriter writer=new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()))
){
//得到客户端信息
//得到首行信息
String firstLine=reader.readLine();
String[] fLingArr=firstLine.split(" ");
//方法类型
String method=fLingArr[0];
//uri
String uri=fLingArr[1];
//http版本号
String httpVersion=fLingArr[2];
System.out.println(String.format("首行信息:方法类型:%s,uri:%s,HTTP版本号:%s",method,uri,httpVersion));
//5.构建返回内容
String content="";
if(uri.contains("404")){
content="<h1>没有找到此页面</h1>";
}else if(uri.contains("200")){
content="<h1>你好世界</h1>";
}
//6.内容输出
//输出首行信息
writer.write(String.format("%s 200 ok",httpVersion+"\n"));
//输出head
writer .write("Content-Type:text/html;charset=utf-8\n");
writer.write("Content-Length: "+content.getBytes().length+"\n");
//输出空行
writer.write("\n");
writer.write(content);
writer.flush();
}
}
}
服务器端:http+127.0.0.1+端口号+uri(404/200)
如何发布具体请回顾4-15🐕