邯郸做企业网站设计的公司开发app需要哪些审批
2026/1/11 11:20:36 网站建设 项目流程
邯郸做企业网站设计的公司,开发app需要哪些审批,androidstudio使用教程,关键词排名公司网络编程TCPTCP的核心特点#xff1a;面向字节流#xff08;UDP是数据报#xff09;#xff0c;所有的读写的基本单位都是byteServerSocket#xff1a;专门给服务器使用的#xff0c;负责连接#xff0c;不对数据进行操作Socket#xff1a;服务器和客户端都可以使用当服…网络编程TCPTCP的核心特点面向字节流UDP是数据报所有的读写的基本单位都是byteServerSocket专门给服务器使用的负责连接不对数据进行操作Socket服务器和客户端都可以使用当服务器启动的时候绑定端口号因为TCP是有连接的所以要使用accept去确保连接的开始Socket要传入服务器的ip和端口号因为TCP面向的是字节流所以他没有向UDP数据报的那种sent和review方法有的是字节流的读取和之前文件IO很像TCPEchoServer思路实现TCPEchoServer首先我们需要知道所有的代码都是无法直接操作网卡的一开始我创建了一个serversocket类型的空变量然后在构造方法中传入端口号这个就相当于我使用serversocket类这个代理人去帮我向操作系统申请一个小窗口和网卡进行沟通连接之后因为serversocket只是连接无法操作数据所以就要使用socket来操作然后在start方法中首先我使用printf格式打印出来日志然后因为TCP面向的是字节流所以我不能向UDP那样使用数据报datagrampacket去进行操作而是要使用inputstream和outputstream进行操作这两个本来是需要使用read和write进行操作的但是为了方便的情况下我就使用scanner和printwrite进行套壳然后因为我们这个是服务器所以要在processconnecition方法中写内层一个死循环反复进行读取然后当有输入的时候使用一个string类型的去接收接收到之后就要进行处理因为现在是回显式所以先不管然后处理完响应只需要发回去就行这个时候也有一个注意的地方就是缓冲区在java中因为每次直接对网络或者文件进行修改太慢了所有就会存在一个缓冲区把你写的全部先存在一个地方所以他并没有马上就传输出去必须要等你使用flush把他冲走他才会真的发送具体实现第一步这一步首先就是创建一个空的serversocket类型的变量然后在构造方法中初始化的时候传入使用的端口号说人话就是你没办法直接操作网卡所以要找serversocket这个代理人帮你和操作系统申请一个窗口让你能够和网卡进行沟通第二步这一步首先就是打印日志服务器启动然后因为TCP是有连接的所以我们需要先处理外层的连接然后再去处理连接之后的事情使用socket这个来处理文件的读取注意这个时候因为可能不只一个连接所以我们需要加入一个死循环确保可以支持多个客户端使用第三步核心这一步就是整个服务器最核心的地方了首先当确立了连接之后我们会记录日志把对方的IP和端口号全部获取到因为TCP协议是字节流的所以这个时候就需要使用inputstream和outputstream这两个操作字节流这里可以使用另外一种写法每次读取一个数组的长度读到-1就停止那种但是就很麻烦所以我们直接使用scanner和printwrite这两个更方便只需要对inputstream和outputstream进行套个壳就行套完壳之后就可以直接使用了。之后就很简单了只要连接没断开就会一直等后续的逻辑就是先读取请求然后计算并返回响应注意要刷新缓冲区不然就会出现发不出去的情况最后打印一下日志就结束。源码package NetWork; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.io.PrintWriter; import java.net.ServerSocket; import java.net.Socket; import java.util.Scanner; /** * Created with IntelliJ IDEA. * Description: * User: zhany * Date: 2025-12-15 * Time: 15:07 */ /*tcp协议的特点有连接面向字节流全双工可靠传输*/ public class TcpServerDemo { //首先创建一个serversocket的空变量,Serversocket就是专门用来连接的 ServerSocket serverSocket null; //初始化的同时指定端口号 public TcpServerDemo(int serverPort) throws IOException { serverSocket new ServerSocket(serverPort); } //start方法 public void start() throws IOException { //首先这个是服务器所以需要24小时工作 System.out.println(服务器启动); while(true){ //前面的serversocket任务已经结束只负责连接不负责数据的修改下面登场的是socket Socket clientSocket serverSocket.accept(); //连接完就要负责处理数据了 Thread thread new Thread(()-{ processconection(clientSocket); }); thread.start(); } } private void processconection(Socket clientSocket) { //先打印日志 System.out.printf([%s,%d],客户端上线\n,clientSocket.getInetAddress(),clientSocket.getPort()); try(InputStream inputStream clientSocket.getInputStream(); OutputStream outputStream clientSocket.getOutputStream()) { while (true){ //字节流需要使用input和output //1.获取并解析连接 Scanner scanner new Scanner(inputStream); PrintWriter writer new PrintWriter(outputStream); if (!scanner.hasNext()){ System.out.printf([%s,%d],客户端下线\n,clientSocket.getInetAddress(),clientSocket.getPort()); break; } String request scanner.next(); //计算并返回 String response process(request); writer.println(response); //刷新缓冲区 writer.flush(); } } catch (IOException e) { e.printStackTrace(); } finally { try { clientSocket.close(); } catch (IOException e) { e.printStackTrace(); } } } private String process(String request) { return request; } public static void main(String[] args) throws IOException { TcpServerDemo tcpServerDemo new TcpServerDemo(9090); tcpServerDemo.start(); } }TcpEchoClient思路客户端的思路就比较简单首先在构造方法中需要初始化一下要去访问的服务器和端口号然后在start方法中也是比较简单的因为tcp是字节流的所以需要直接使用inputstream和outputstream直接使用套壳的scanner和printwrite会简单一些不使用就要使用文件io的办法然后在控制台读取用户的输入然后发送给服务器然后接受服务器的请求就可以了注意这个也是要释放缓冲区的。具体实现第一步Tcp中是提供构造方法让你可以直接输入网址的类似于127.0.0.1在udp中要调用方法getname才行这里初始化了要访问的ip和端口号第二步核心的start方法这里就很简单了因为TCP是字节流所以他进行的操作也是需要使用inputstream和outputstream来进行操作的使用scanner和printwrite进行套壳就不需要使用基础的文件io那种复杂的写法然后只需要在控制台读取用户的输入然后发送接收返回值就行了源码package NetWork; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.io.PrintWriter; import java.net.Socket; import java.util.Scanner; public class TcpClientDemo { private Socket socket; private static final String EXIT_CMD exit; public TcpClientDemo(String serverIP, int serverPort) throws IOException { socket new Socket(serverIP, serverPort); } public void start() { System.out.println(客户端启动); System.out.println(输入内容发送到服务器(输入exit退出)); try (InputStream inputStream socket.getInputStream(); OutputStream outputStream socket.getOutputStream(); Scanner scanner new Scanner(System.in); Scanner scannerNet new Scanner(inputStream); PrintWriter writer new PrintWriter(outputStream)) { while (true) { String request scanner.nextLine(); if (EXIT_CMD.equalsIgnoreCase(request)) { break; } writer.println(request); writer.flush(); if (scannerNet.hasNextLine()) { String response scannerNet.nextLine(); System.out.println(服务器响应: response); } } } catch (IOException e) { System.err.println(通信异常: e.getMessage()); } finally { try { if (socket ! null !socket.isClosed()) { socket.close(); } } catch (IOException e) { System.err.println(关闭socket异常: e.getMessage()); } } } public static void main(String[] args) { try { TcpClientDemo tcpClientDemo new TcpClientDemo(127.0.0.1, 9090); tcpClientDemo.start(); } catch (IOException e) { System.err.println(连接服务器失败: e.getMessage()); } } }上述的代码中存在一个问题就是多个客户端去访问的时候会被卡住阻塞在因为当代码执行到确立连接之后他就会往下走跳到processconnection里面去这个时候后面的线程想要连接就必须等待前面的结束完才可以用如何解决这个问题多线程这个时候就诞生了只需要在在服务器里面加一个线程这样就能实现让多线程去实现直接开启分身模式小心超人上线但是每次都创建一个线程和销毁一个线程开销的很大的有没有更好的方法有线程池方法在一开始就创建好n个线程每当一个客户端来了就使用一下线程这样就能最大限度使用服务器

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询