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里面有JTextField,JTextArea和button。
下面这一段是对鼠标点击发送按钮的反应,
新建Datagrampacket对象,发送数据到端口9999(服务器接收)
新建Datagramsocket对象,执行send函数,将包含outMessage内文字的packet发送出去。
以下这段是接收信息,新建Datagrampacket对象,用于接收数据。
新建Datagramsocket对象,接收端口为5678。
执行receive函数,将接收到的数据存在pack,然后在界面inMessage显示出来。
类B是客户端b,操作与A类似,数据发送到端口9999(服务器接收),接收端口为1234.
Class C 是服务器端,服务器短接收到信息之后,判断信息是来自A还是B,
若来自A,则转发到B,若来自B,转发到A.
服务器端的run方法,接收端口9999,接收到数据后,存在字符串meassage,message[0]是标记,
message[0]为A表示数据来自A,则打包发送到端口1234(B接收),
message[0]为B表示数据来自B,则打包发送到端口5678(A接收)。
客户端A发送“最近可好”,服务器端C收到“最近可好”,接着发给客户端B。
客户端B发送“最近还不错”, 服务器端C收到“最近还不错”,接着发给客户端A。
3.Java socket 和Linux socket区别
JAVA底层也是调用linux 网络API实现网络通信的
JAVA的SOCKET编程的底层原理是JVM将JAVA程序解析出来的参数传递给所对应的C++程序,由C++执行完之后回传给JAVA。
而LINUX自带的SOCKET编程只能再LINUX操作系统下使用,JAVA与LINUX的API也不一致。
s