java实现一个简单的网络聊天程序(代码片段)

yorkiii yorkiii     2022-12-23     700

关键词:

代码

服务器端

package socket_demo;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;

public class server 
    public static void main(String[] args) throws Exception 
        // 监听指定的端口,阻塞直至客户端连接此端口
        int port = 23333;
        ServerSocket server = new ServerSocket(port);
        System.out.println("server is waiting...");
        Socket socket = server.accept();
        System.out.println("Connected!");

        // 读取从客户端返回的输入流,至尾端时返回-1
        InputStream input = socket.getInputStream();
        byte[] bytes = new byte[1024];
        int len;
        StringBuilder get = new StringBuilder();
        while ((len = input.read(bytes)) != -1) 
            get.append(new String(bytes, 0, len, "UTF-8"));
        
        System.out.println("get message from client: " + get);

        OutputStream output = socket.getOutputStream();
        String sent = "Hi there";
        output.write(sent.getBytes("UTF-8"));
        System.out.println("sent message to client: " + sent);

        // 关闭socket与服务器端
        input.close();
        output.close();
        socket.close();
        server.close();
    

 
客户端

package socket_demo;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.Socket;


public class client 
    public static void main(String args[]) throws Exception 
        // 连接本地主机,端口自设,与服务端一致即可
        String host = "127.0.0.1";
        int port = 23333;
        // 通过socket与服务端建立连接
        Socket socket = new Socket(host, port);
        if(socket.isConnected())
            System.out.println("Connected!");
        
        // 将要发送的信息写入输出流
        OutputStream output = socket.getOutputStream();
        String sent = "hello";
        socket.getOutputStream().write(sent.getBytes("UTF-8"));
        // 关闭客户端的输出流(单向,并未关闭socket)
        socket.shutdownOutput();
        System.out.println("sent message to server: " + sent);

        // 读取从server返回的输入流
        InputStream input = socket.getInputStream();
        byte[] bytes = new byte[1024];
        int len;
        StringBuilder get = new StringBuilder();
        while ((len = input.read(bytes)) != -1) 
            get.append(new String(bytes, 0, len,"UTF-8"));
        
        System.out.println("get message from server: " + get);

        // 关闭socket
        input.close();
        output.close();
        socket.close();
    

测试结果

服务器端

 
客户端

JAVA Socket API分析

以上代码用到的JAVA SOCKET API主要有:
Socket(InetAddress address, int port) --创建一个流套接字并将其连接到指定的IP地址与指定端口
ServerSocket(int port)--服务器端绑定一个窗口
server.accept()--服务器端等待连接(持续阻塞)
socket.getInputStream()--返回此套接字的输入流
socket.getOutputStream()--返回此套接字的输出流
socket.close()--关闭此套接字
JAVA中方法的实现都要通过JVM翻译给系统执行,所以JAVA SOCKET API与系统(本例为windows)SOCKET API有着对应关系。
我们通过在IDEA中使用Ctrl+Alt+HCtrl+Alt+B跟踪查看api的调用栈,以server.accept()为例

双击右边函数名,查看其调用,进一步查看ServerSocket.implAccept(Socket)






这里accept0()是一个native api,无法再继续上溯
完整的调用栈为server.accept()->ServerSocket.implAccept(Socket) (java.net)->SocketImpl.accept(SocketImpl)
->AbstractPlainSocketImpl.socketAccept(SocketImpl)->PlainSocketImpl.accept0(int, InetSocketAddress[])
综上,java socket中的server.accept()对应windows socket中的accept0(int var0, InetSocketAddress[] var1)
其它socket api也都有着类似的对应关系,通过查看调用栈可以一一查找,这里不再赘述

利用java的socket实现一个简单hello/hi聊天程序(代码片段)

 利用java的Socket实现一个简单hello/hi聊天程序 首先,我们来用java实现一个简单的hello/hi聊天程序。在这个程序里,我学习到了怎么用socket套接套接字来进行编程。简单理解了一些关于socket套接字和底层调用的关系。关于jav... 查看详情

java实现一个hello/hi的简单的网络聊天程序(代码片段)

使用Java的Socket实现客户端和服务器端之间的连接,实现客户端重复发送数据到服务器端的功能。即,用户可以在控制台不断输入内容,并将内容逐一发送给服务端。并在服务端显示。socket定义    网络上的两个程... 查看详情

使用java实现一个hello/hi的简单的网络聊天程序(代码片段)

1、socket原理    Socket实质上提供了进程通信的端点。进程通信之前,双方首先必须各自创建一个端点,否则是没有办法建立联系并相互通信的。正如打电话之前,双方必须各自拥有一台电话机一样。     &n... 查看详情

python实现一个简单的网络聊天程序(代码片段)

一、LinuxSocket1.LinuxSocke基本上就是BSDSocket(伯克利套接字)伯克利套接字的应用编程接口(API)是采用C语言的进程间通信的库,经常用在计算机网络间的通信。BSDSocket的应用编程接口已经是网络套接字的抽象标准。大多数其他程... 查看详情

使用python实现一个hello/hi的简单的网络聊天程序(代码片段)

一、TCP/IP协议通信原理   TCP/IP协议包含的范围非常的广,它是一种四层协议,包含了各种硬件、软件需求的定义。TCP/IP协议确切的说法应该是TCP/UDP/IP协议。UDP协议(UserDatagramProtocol用户数据报协议),是一种保护消息边界的... 查看详情

编写java程序,实现一个简单的echo程序(网络编程tcp实践练习)(代码片段)

首先启动服务端,客户端通过TCP的三次握手与服务端建立连接;然后,客户端发送一段字符串,服务端收到字符串后,原封不动的发回给客户端。ECHO程序是网络编程通信交互的一个经典案例,称为回应程... 查看详情

java案例:基于tcp的简单聊天程序(代码片段)

文章目录一、如何实现TCP通信二、编写C/S架构聊天程序(一)编写服务器端程序-Server.java(二)编写客户端程序-Client.java(三)测试服务器端与客户端能否通信(四)程序优化思路-服务器端采用多... 查看详情

一个hello/hi的简单的网络聊天程序(代码片段)

  我选择使用python来实现hello/hi的简单网络聊天程序,源代码包括两个部分,客户端代码和服务器端代码,源代码部分如下图所示:服务器端代码1importsocket23HOST=‘127.0.0.1‘4PORT=888856server=socket.socket()7server.bind((HOST,PORT))8server.list... 查看详情

java使用lock实现一个简单的死锁程序(代码片段)

importjava.util.concurrent.locks.Condition;importjava.util.concurrent.locks.ReentrantLock;publicclassFourpublicstaticvoidmain(String[]args)finalService1myService=newService1();for(inti=0;i<10;i++ 查看详情

实现一个简单的unity网络同步引擎——netgo(代码片段)

实现一个简单的Unity网络同步引擎Netgo目前GOLANG有大行其道的趋势,尤其是在网络编程方面。因为和c/c++比较起来,虽然GC占用了一部分机器性能,但是出错概率小了,开发效率大大提升,而且应用其原生支持的协程很容易就能开... 查看详情

c语言实现一个hello/hi的简单聊天程序并跟踪分析到系统调用(代码片段)

socket编程介绍Socket接口是TCP/IP网络的API,Socket接口定义了许多函数或例程,可以用它们来开发TCP/IP网络上的应用程序。Socket接口设计者最先是将接口放在Unix操作系统里面的。如果了解Unix系统的输入和输出的话,就很容易了解Sock... 查看详情

java实现的多人聊天(控制台输入)(代码片段)

在学习android时,想做一个多人聊天室,不知如何动手想先做一个纯java的简单多人聊天室,理理思路通过Socket套接字进行数据传输用到的知识点是:Socket,ServerSocket, 多线程 服务器程序:importjava.io.BufferedReader;i... 查看详情

使用python实现一个简单的智能聊天机器人(代码片段)

简要说明最近两天需要做一个python的小程序,就是实现人与智能机器人(智能对话接口)的对话功能,目前刚刚测试了一下可以实现,就是能够实现个人与机器的智能对话(语音交流)。总体的思路大家可以设想一下,... 查看详情

使用python完成一个hello/hi的简单的网络聊天程序(代码片段)

  在这篇文章中,我将先简要介绍socket原理,然后给出一个利用Python实现的简单通信样例,最后通过跟踪系统调用来分析Python中socket函数与Linux系统调用的对应关系。1.socket简介Socket是应用层与TCP/IP协议族通信的中间软件抽象... 查看详情

基于python完成一个hello/hi的简单的网络聊天程序(代码片段)

一、Socket套接字简介套接字(socket)是一个抽象层,应用程序可以通过它发送或接收数据,可对其进行像对文件一样的打开、读写和关闭等操作。套接字允许应用程序将I/O插入到网络中,并与网络中的其他应用程序进行通信。网... 查看详情

java的socket连接,聊天室通信实现(代码片段)

很多小伙伴在读大学的时候都分不清客户端和服务器的区别。简单来说,没有联网功能的程序,都是在玩单机。那么一个程序要怎么才能联网呢?接下来我们来聊聊socket连接。认识socketSocket是应用层与TCP/IP协议族通信... 查看详情

用go语言实现一个简单的聊天机器人(代码片段)

一、介绍目的:使用Go语言写一个简单的聊天机器人,复习整合Go语言的语法和基础知识。软件环境:Go1.9,Goland2018.1.5。 二、回顾Go语言基本构成要素:标识符、关键字、字面量、分隔符、操作符。它们可以组成各种表达式... 查看详情

网络编程基础(代码片段)

...开发常见的网络应用程序。Java提供的网络类库,可以实现无痛的网络连接,联网的底层细节被隐藏在Java的本机安装系统里,由JVM进行控制。并且Java实现了一个跨平台的网络库,程序员面对的是一个统一的网络编程环境。网络... 查看详情