JAVA Socket 网络联机 客户端 服务端 笔记

来源:互联网 发布:青蜂网络 编辑:程序博客网 时间:2024/05/22 14:51
①建立Socket连接,Socket(IP地址,TCP端口)

Socket类在java.net.Socket
Socket用于server与client的通信

import java.net.*;

JAVA Socket 网络联机 客户端 服务端 笔记 - 小镜子~ - 菜园子
 
 
 
//socket用以链接IP为"127.0.0.1",端口号为5000的服务器程序
Socket构造函数有两个参数,第一个是IP地址(IP=127.0.0.1表示本机,LocalHost,便于测试),第二个是TCP端口号(端口号可以取0-65535,其中0-1023被一些特定的端口使用,如HTTP是80,SMTP是25,FTP是20)

IP地址就像门牌号,指定特定的地方,TCP端口号就是该地址不同的窗口(如80号窗口处理网页,25号窗口处理邮件)

不同程序不能共享一个端口,如果使用的端口已经被占用,会抛出异常BIndException 

②从Socket上读取数据(用BufferedReader)

InputStreamReader stream = new InputStreamReader(so.getInputStream());
//从Socket 取得输入流
BufferedReader reader = new BufferedReader(stream);
//输入的字节变为字符存入缓冲区
String message = reader.readLine();
//从缓冲区reader中读一行

③向Socket写入数据(用BufferedWriter与以上类似,此处用的是PrintWriter 写入字符串)

PrintWriter writer = new PrintWriter(so.getOutputStream());
//writer链接Socket输出流
writer.println("message to send");
writer.print("message to send")
//向writer直接写入字符串,有两种方式 println()(有换行)和print()
writer.flush();
//可以吧PrintWriter里的所有的信息都强制输入进Socket(以流的形式),在另一端可以以getInputStream()的形式接受

④编写客户端与服务器程序

编写服务器程序时,要特别注意:
需要两个Socket :
ServerSocket用于等待用户请求
Socket用于用户服务器通信

ServerSocket serverSock = new ServerSocket(4242);
//让服务器程序开始监听来自4242端口的客户端请求
(Socket so = new Socket("192.156.1.103",4242) 这是客户端程序与服务器建立的Socket链接)

Socket sock = serverSock.accept();
//等待用户时,accept()闲置;当有用户连上服务器时,accept()会返回一个新的Socket(赋予新的端口),于是ServerSocket可以空出等待其他的用户


一个幼稚版多线程聊天工具的服务端和客户端程序,用来测试:
原创粉丝点击