socket通信使用

本文介绍了Java中的Socket通信,包括ServerSocket和Socket的使用,通过代码示例展示了如何建立连接并进行数据交换。此外,还提及了Markdown的多种语法,如列表、表格、代码片、图片和注脚等,提供了丰富的文本格式化方法。
摘要由CSDN通过智能技术生成

socket

套接字(Socket),就是对网络中不同主机上的应用进程之间进行双向通信的端点的抽象。一个套接字就是网络上进程通信的一端,提供了应用层进程利用网络协议交换数据的机制。从所处的地位来讲,套接字上联应用进程,下联网络协议栈,是应用程序通过网络协议进行通信的接口,是应用程序与网络协议根进行交互的接口

代码1

package com.icss.itomcat;

import java.io.BufferedInputStream;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.DataInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.net.Socket;

public class WorkThread implements Runnable {
// 保存当前套接字
private Socket socket;

public WorkThread(Socket socket) {
	this.socket = socket;
}

@Override
public void run() {
	// TODO Auto-generated method stub
	// 处理请求数据和发送响应数据
	try {
		InputStream in = this.socket.getInputStream(); // 输入流,读取请求数据
		OutputStream out = this.socket.getOutputStream();// 输出流,发送响应数据

		// 读取请求头
		String requestHeader = "";// 保存请求
		BufferedReader br = new BufferedReader(new InputStreamReader(in));
		String line = null;
		while ((line = br.readLine()) != null && line.length() > 0) {
			requestHeader += line + "\r\n";
		}
		// 解析请求头
		String[] headers = requestHeader.split("\r\n");
		String url = headers[0].split(" ")[1];
		if(url.equals("/index.html")) { // 如果请求index.html
			String filePath = this.getClass().getResource("/").getPath();
			File file = new File(filePath + "index.html");
			StringBuilder sb=new StringBuilder();
	        sb.append("HTTP/1.0 200 OK\r\n");
	        sb.append("Content-Type: text/html;charset=utf-8\r\n");
	        sb.append("X-Ua-Compatible: IE=Edge,chrome=1\r\n");
	       
	        String path = this.getClass().getResource("/").getPath();
	        System.out.println(path);
		    BufferedReader reader = null;
		    StringBuffer sbf = new StringBuffer();
		    try {
		        reader = new BufferedReader(new FileReader(file));
		        String tempStr;
		        while ((tempStr = reader.readLine()) != null) {
		            sbf.append(tempStr);
		        }
		        reader.close();
		    } catch (IOException e) {
		        e.printStackTrace();
		    } finally {
		        if (reader != null) {
		            try {
		                reader.close();
		            } catch (IOException e1) {
		                e1.printStackTrace();
		            }
		        }
		    }
		    sb.append("Content-length: ").append(sbf.toString().getBytes().length).append("\r\n");
	        sb.append("\r\n");
		    System.out.println(sb.append(sbf.toString()));
	        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(out));
            bw.write(sb.toString());
            bw.flush();
		} else if (url.equals("/tomcat.png")) {   // 图片 tomcat.png
			StringBuilder sb=new StringBuilder();
	        sb.append("HTTP/1.0 200 OK\r\n");
	        sb.append("Content-Type: image/png\r\n");
	        sb.append("X-Ua-Compatible: IE=Edge,chrome=1\r\n");
	       
	        String path = this.getClass().getResource("/").getPath();
	        System.out.println(path);
			String fileName = path + "tomcat.png";
			File file = new File(fileName);
			DataInputStream fis=new DataInputStream(new BufferedInputStream(new FileInputStream(file)));
			byte[] theData=new byte[(int)file.length()];
			fis.readFully(theData);
			fis.close();
		    sb.append("Content-length: ").append(theData.length).append("\r\n");
	        sb.append("\r\n");
		    System.out.println(sb.toString());
	        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(out));
            bw.write(sb.toString());
            bw.flush();
            out.write(theData);
            out.flush();}
            else {

			// 实现最简单的应答
			String responseHeader = "";// 封装应答头
			String responseContent = "<html><head></head>" + "<body>欢迎访问  小Q达人  的个人主页" + "</body></html>";// 封装应答内容

			responseHeader += "HTTP/1.1 200 OK\r\n";
			responseHeader += "Content-Type: text/html;charset=utf-8/r/n";
			responseHeader += "Content-length:" + responseContent.getBytes().length + "\r\n";
			responseHeader += "\r\n";

			String content = responseHeader + responseContent;
			BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(out));
			bw.write(content);
			bw.flush();
		}

		in.close();
		out.close();
		socket.close();
		System.out.println(requestHeader);

	} catch (IOException e) {
		// TODO Auto-generated catch block
		e.printStackTrace();
	} finally {

	}
}

}

代码2

package com.icss.itomcat;

import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;

public class HttpServer extends Thread {
// 服务器监听socket
private ServerSocket serverSocket;

public HttpServer(int port) {
	try {
		this.serverSocket = new ServerSocket(port);
	} catch (IOException e) {
		// TODO Auto-generated catch block
		e.printStackTrace();
	}

}

public void run() {
	while (true) {
		try {
			// 监听连接,返回当前连接的套接字
			System.out.println("服务器启动成功");
			Socket clientSocket = this.serverSocket.accept();
			//启动子线程,处理当前的socket请求
			WorkThread wt=new WorkThread(clientSocket);
			new Thread(wt).start();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
}

public static void main(String[] args) {
	new HttpServer(80).start();
}

}

代码实现

实现结果

链接: link.

图片: Alt

带尺寸的图片: Alt

居中的图片: Alt

居中并且带尺寸的图片: Alt

当然,我们为了让用户更加便捷,我们增加了图片拖拽功能。

如何插入一段漂亮的代码片

博客设置页面,选择一款你喜欢的代码片高亮样式,下面展示同样高亮的 代码片.

// An highlighted block
var foo = 'bar';

生成一个适合你的列表

  • 项目
    • 项目
      • 项目
  1. 项目1
  2. 项目2
  3. 项目3
  • 计划任务
  • 完成任务

创建一个表格

一个简单的表格是这么创建的:

项目 Value
电脑 $1600
手机 $12
导管 $1

设定内容居中、居左、居右

使用:---------:居中
使用:----------居左
使用----------:居右

第一列 第二列 第三列
第一列文本居中 第二列文本居右 第三列文本居左

SmartyPants

SmartyPants将ASCII标点字符转换为“智能”印刷标点HTML实体。例如:

TYPE ASCII HTML
Single backticks 'Isn't this fun?' ‘Isn’t this fun?’
Quotes "Isn't this fun?" “Isn’t this fun?”
Dashes -- is en-dash, --- is em-dash – is en-dash, — is em-dash

创建一个自定义列表

Markdown
Text-to- HTML conversion tool
Authors
John
Luke

如何创建一个注脚

一个具有注脚的文本。1

注释也是必不可少的

Markdown将文本转换为 HTML

KaTeX数学公式

您可以使用渲染LaTeX数学表达式 KaTeX:

Gamma公式展示 Γ ( n ) = ( n − 1 ) ! ∀ n ∈ N \Gamma(n) = (n-1)!\quad\forall n\in\mathbb N Γ(n)=(n1)!nN 是通过欧拉积分

Γ ( z ) = ∫ 0 ∞ t z − 1 e − t d t   . \Gamma(z) = \int_0^\infty t^{z-1}e^{-t}dt\,. Γ(z)=

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值