java中的socket是什么意思?

Python020

java中的socket是什么意思?,第1张

所谓socket通常也称作"套接字",用于描述IP地址和端口,是一个通信链的句柄。应用程序通常通过"套接字"向网络发出请求或者应答网络请求。\x0d\x0a以J2SDK-1.3为例,Socket和ServerSocket类库位于java.net包中。ServerSocket用于服务器端,Socket是建立网络连接时使用的。在连接成功时,应用程序两端都会产生一个Socket实例,操作这个实例,完成所需的会话。对于一个网络连接来说,套接字是平等的,并没有差别,不因为在服务器端或在客户端而产生不同级别。不管是Socket还是ServerSocket它们的工作都是通过SocketImpl类及其子类完成的。\x0d\x0a重要的Socket API:\x0d\x0ajava.net.Socket继承于java.lang.Object,有八个构造器,其方法并不多,下面介绍使用最频繁的三个方法,其它方法大家可以见JDK-1.3文档。\x0d\x0a. Accept方法用于产生"阻塞",直到接受到一个连接,并且返回一个客户端的Socket对象实例。"阻塞"是一个术语,它使程序运行暂时"停留"在这个地方,直到一个会话产生,然后程序继续;通常"阻塞"是由循环产生的。\x0d\x0a. getInputStream方法获得网络连接输入,同时返回一个InputStream对象实例。\x0d\x0a. getOutputStream方法连接的另一端将得到输入,同时返回一个OutputStream对象实例。\x0d\x0a注意:其中getInputStream和getOutputStream方法均会产生一个IOException,它必须被捕获,因为它们返回的流对象,通常都会被另一个流对象使用。\x0d\x0a2ServerSocket类例子编辑\x0d\x0a\x0d\x0apackage com.lanber.socket\x0d\x0aimport java.io.DataInputStream\x0d\x0aimport java.io.DataOutputStream\x0d\x0aimport java.io.IOException\x0d\x0aimport java.net.ServerSocket\x0d\x0aimport java.net.Socket\x0d\x0apublic class ServerDemo {\x0d\x0a/**\x0d\x0a* 注意:Socket的发送与接收是需要同步进行的,即客户端发送一条信息,服务器必需先接收这条信息,\x0d\x0a* 而后才可以向客户端发送信息,否则将会有运行时出错。\x0d\x0a* @param args\x0d\x0a*/\x0d\x0apublic static void main(String[] args) {\x0d\x0aServerSocket ss = null\x0d\x0atry {\x0d\x0ass = new ServerSocket(8888)\x0d\x0a//服务器接收到客户端的数据后,创建与此客户端对话的Socket\x0d\x0aSocket socket = ss.accept()\x0d\x0a//用于向客户端发送数据的输出流\x0d\x0aDataOutputStream dos = new DataOutputStream(socket.getOutputStream())\x0d\x0a//用于接收客户端发来的数据的输入流\x0d\x0aDataInputStream dis = new DataInputStream(socket.getInputStream())\x0d\x0aSystem.out.println("服务器接收到客户端的连接请求:" + dis.readUTF())\x0d\x0a//服务器向客户端发送连接成功确认信息\x0d\x0ados.writeUTF("接受连接请求,连接成功!")\x0d\x0a//不需要继续使用此连接时,关闭连接\x0d\x0asocket.close()\x0d\x0ass.close()\x0d\x0a} catch (IOException e) {\x0d\x0ae.printStackTrace()\x0d\x0a}\x0d\x0a}\x0d\x0a}\x0d\x0a\x0d\x0a3客户端的例子编辑\x0d\x0apackage com.lanber.socket\x0d\x0aimportjava.io.DataInputStream\x0d\x0aimport java.io.DataOutputStream\x0d\x0aimportjava.io.IOException\x0d\x0aimport java.io.OutputStream\x0d\x0aimport java.net.Socket\x0d\x0aimport java.net.UnknownHostException\x0d\x0apublic class ClientDemo {\x0d\x0a/**\x0d\x0a* @param args\x0d\x0a*/\x0d\x0apublic static void main(String[] args) {\x0d\x0aSocket socket = null\x0d\x0atry {\x0d\x0asocket = new Socket("localhost",8888)\x0d\x0a//获取输出流,用于客户端向服务器端发送数据\x0d\x0aDataOutputStream dos = new DataOutputStream(socket.getOutputStream())\x0d\x0a//获取输入流,用于接收服务器端发送来的数据\x0d\x0aDataInputStream dis = new DataInputStream(socket.getInputStream())\x0d\x0a//客户端向服务器端发送数据\x0d\x0ados.writeUTF("我是客户端,请求连接!")\x0d\x0a//打印出从服务器端接收到的数据\x0d\x0aSystem.out.println(dis.readUTF())\x0d\x0a//不需要继续使用此连接时,记得关闭哦\x0d\x0asocket.close()\x0d\x0a} catch (UnknownHostException e) {\x0d\x0ae.printStackTrace()\x0d\x0a} catch (IOException e) {\x0d\x0ae.printStackTrace()\x0d\x0a}\x0d\x0a}\x0d\x0a}

服务器端和客户端都是通过SOCKET来进行通信的,首先产生一个 socket实例,通过这个实例,服务器端调用accept这个方法接收来自客户端发送的信息.但是在产生socket实例的时候必须初始化一个端口.用来负责接受客户端的请求!

客户端要给服务器发送消息也必须产生一个socket实例,初始化的时候必须指定服务器的IP地址,并且指定服务接收的端口号,这样客户端才能找到服务器要接收的地方,找到地方就可以发送过去了。和你写信一样。找到地址

BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()))

PrintWriter out = new PrintWriter(socket.getOutputStream())

BufferedReader wt = new BufferedReader(new InputStreamReader(System.in))

这个只是用来获取一个从键盘的一个流.传送给服务器端的数据都是通过流来表示的。意思是是键盘输入的一个字节转化成字符流.并输出或者写入!

while(true){ // 在这里死循环里面做手脚

Socket s = ss.accept()

// 走到这一步,就说明有客户端连接上来了,

// 你的服务端,就可以new 一个JFrame出来,让他实现聊天功能

new Server(s).start()

}