基于java实现的一个hello/hi的简单的网络聊天程序

1.socket原理

(1)IP地址

在网络中每台计算机都必须有一个的IP地址; 
32位,4个字节,常用点分十进制的格式表示,例如:192.168.1.100 

127.0.0.1 是固定ip地址,代表当前计算机,相当于面向对象里的"this"。

 

(2)端口

两台计算机进行连接,总有一台服务器,一台客户端。
服务器和客户端之间的通信通过端口进行。例如:
ip地址是 192.168.1.100的服务器通过端口 8080
与ip地址是192.168.1.189的客户端 的1087端口通信

(3)建立连接

1. 服务端开启8888端口,并监听着,时刻等待着客户端的连接请求 
2. 客户端知道服务端的ip地址和监听端口号,发出请求到服务端 
客户端的端口地址是系统分配的,通常都会大于1024 
一旦建立了连接,服务端会得到一个新的Socket对象,该对象负责与客户端进行通信。 
服务端和客户端就可以通过Socket进行通信了 

具体的实现在下一部分。

 

2.java实现有界面的网络聊天程序

Class A 是客户端A,下面这段是初始化A的界面,

JTextField outMessage 是输入文字发送出去的区域,  

JTextArea inMessage是接受文字的区域。

Container包括滚动条和Jpanel

Jpanel里面有JTextFieldJTextAreabutton

基于java实现的一个hello/hi的简单的网络聊天程序_第1张图片

 

下面这一段是对鼠标点击发送按钮的反应,

新建Datagrampacket对象,发送数据到端口9999(服务器接收)

新建Datagramsocket对象,执行send函数,将包含outMessage内文字的packet发送出去。

基于java实现的一个hello/hi的简单的网络聊天程序_第2张图片

 

以下这段是接收信息,新建Datagrampacket对象,用于接收数据。

新建Datagramsocket对象,接收端口为5678

执行receive函数,将接收到的数据存在pack,然后在界面inMessage显示出来。

基于java实现的一个hello/hi的简单的网络聊天程序_第3张图片

 

B是客户端b,操作与A类似,数据发送到端口9999(服务器接收),接收端口为1234.

基于java实现的一个hello/hi的简单的网络聊天程序_第4张图片

基于java实现的一个hello/hi的简单的网络聊天程序_第5张图片

基于java实现的一个hello/hi的简单的网络聊天程序_第6张图片

Class C 是服务器端,服务器短接收到信息之后,判断信息是来自A还是B

若来自A,则转发到B,若来自B,转发到A.

基于java实现的一个hello/hi的简单的网络聊天程序_第7张图片

 

基于java实现的一个hello/hi的简单的网络聊天程序_第8张图片

服务器端的run方法,接收端口9999,接收到数据后,存在字符串meassage,message[0]是标记,

message[0]A表示数据来自A,则打包发送到端口1234B接收),

message[0]B表示数据来自B,则打包发送到端口5678A接收)。

基于java实现的一个hello/hi的简单的网络聊天程序_第9张图片

 

客户端A发送“最近可好”,服务器端C收到“最近可好”,接着发给客户端B

客户端B发送“最近还不错”, 服务器端C收到“最近还不错”,接着发给客户端A

基于java实现的一个hello/hi的简单的网络聊天程序_第10张图片基于java实现的一个hello/hi的简单的网络聊天程序_第11张图片基于java实现的一个hello/hi的简单的网络聊天程序_第12张图片

 

3.Java socket 和Linux socket区别

JAVA底层也是调用linux 网络API实现网络通信的

JAVA的SOCKET编程的底层原理是JVM将JAVA程序解析出来的参数传递给所对应的C++程序,由C++执行完之后回传给JAVA。

而LINUX自带的SOCKET编程只能再LINUX操作系统下使用,JAVA与LINUX的API也不一致。

s

你可能感兴趣的:(基于java实现的一个hello/hi的简单的网络聊天程序)