WEB JAVA Socket 访问

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了WEB JAVA Socket 访问相关的知识,希望对你有一定的参考价值。

我现在有3台计算机,其中1台为WEB服务器(采用IIS5.0,IP:192.168.1.1),1台为通讯服务器(上面运行有SOKET服务器程序,IP:192.168.1.2),另外1台为web客户端(IP:192.168.1.3)。当我在web客户端机器上打开web服务器的网页时,想通过网页的java Applet程序通过sicket连接到通讯服务器上。请问能实现吗?
现在的问题是:
当我在把通讯服务程序放在WEB服务器时,Applet中通过Socket能连接到通讯服务程序的Socket服务器程序上,而当把通讯服务器程序放在别的机器时,服务器程序的Socket根本收不到Applet的socket连接请求。
我换了IP地址的。

参考技术A Applet跟普通的java应用程序是一样的,只是他用于网页上显示。当使用SOKET通信的时候必须指定双方机器的IP地址和端口号。这个是程序规定的,当你的服务器换了一台机器后,IP自然就发生改变所以就连不上。
建议你吧SOKET里面指定IP的地方换成变量,写一个配置文件。让系统去配置文件中读取IP地址和端口号,这样便于改动。
参考技术B Applet对本地计算机的文件系统的访问是受限制的,你一定要用Applet吗?我觉得很难 参考技术C Applet 不如 flash好

Java 技术篇 - 启动web服务接收浏览器请求并响应实例演示,解决socket响应浏览器显示中文乱码问题,web服务response响应设置浏览器显示字体方法

先看下效果图:
我通过 127.0.0.1:10010 访问我启用服务的效果图。

后台接收到的前台请求如下:

GET / HTTP/1.1
Host: 127.0.0.1:10010
Connection: keep-alive
sec-ch-ua: " Not;A Brand";v=“99”, “Google Chrome”;v=“91”, “Chromium”;v=“91”
sec-ch-ua-mobile: ?0
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,/;q=0.8,application/signed-exchange;v=b3;q=0.9
Sec-Fetch-Site: none
Sec-Fetch-Mode: navigate
Sec-Fetch-User: ?1
Sec-Fetch-Dest: document
Accept-Encoding: gzip, deflate, br
Accept-Language: zh-CN,zh;q=0.9

下面是源码:
其中响应主体的
<meta http-equiv=\\"Content-Type\\" content=\\"text/html; charset=UTF-8\\"> 可以解决中文内容下的乱码问题。
<style>body{font-family:\\"黑体\\"}</style> 可以设置文本的字体样式。

package com.test.test;

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

public class SocketTest {
    public static void main(String[] args) throws IOException {
        /*
         作用:接收浏览器的请求并响应
         作者:小蓝枣
        */

        // 创建服务,端口设置为10010
        ServerSocket server = new ServerSocket(10010);

        while(true) {

            // 阻塞式连接,当接收请求前保持阻塞
            Socket socket_client = server.accept();

            // 获取输入流
            InputStream in_put = socket_client.getInputStream();

            // 创建一个缓冲数组
            byte data[] = new byte[4096];

            // 将数据读取到缓冲数组中,会返回数据的长度
            in_put.read(data);

            // 制作响应报文
            StringBuffer response = new StringBuffer();

            // 打印请求的数据
            String date_request = new String(data);
            System.out.println(date_request);

            // 响应头部
            String response_head = "HTTP/1.1 200 OK\\r\\n" +
                    "Content-type:text/html\\r\\n\\r\\n";

            // 响应主体
            String response_body = "<meta http-equiv=\\"Content-Type\\" content=\\"text/html; charset=UTF-8\\">" +  // 解决乱码问题
                    "<style>body{font-family:\\"黑体\\"}</style>" +
                    "欢迎来到小蓝枣的博客<br>" +
                    "Welcome to xiaolanzao's blog!";

            response.append(response_head + response_body);

            // 获取输出流
            OutputStream out_put = socket_client.getOutputStream();

            // 将响应数据传给输出流
            out_put.write(response.toString().getBytes());

            // 关闭创建的对象
            out_put.close();
            in_put.close();
            socket_client.close();
        }
    }
}

喜欢的点个赞❤吧!

以上是关于WEB JAVA Socket 访问的主要内容,如果未能解决你的问题,请参考以下文章

java Socket 如何解决访问外网服务器

从 Web Socket @ServerEndpoint 中的 HttpServletRequest 访问 HttpSession

web-socket php中的问题

java web----socket基础

基于java的socket编程及API解析

Java Socket编程 简单的WEB服务器