java中的TCP是什么?如何进行通讯?

发布时间:   来源:CSDN  

1 TCP是什么?什么是丢包?两个计算机间传输数据的规范,只要遵守,就能互相发送数据。切割成包的数据在传输过程中丢失了。

2 UDP是什么?为何不可靠?常用是哪个?不可靠传输协议。不确认包是否收到。TCP,UDP占用带宽大,不能保证即时性。

3 C S模式到B S模式的原因是?客户端过多,用Browser统合。


(资料图片)

4 TCP如何进行通讯?Socket是什么?利用封装的SOCKET类,Socket相当于一个电话,连通后,会提供一个输入流,一个输出流。我的输入流对你的输出流,相反亦是。

5 什么是套接字?即Socket。

6 为何此处捕捉了异常最后还是抛出了异常? public Client() throws Exception{try {} catch (Exception e) {throw e; } }此处并没有处理异常,只是为了记录错误日志而捕捉。(异常并不归该代码块处理)

//一般直接抛出即可,由外部调用方法的代码块处理 //在此处感知错误是为了记录错误日志——当需要感知错误时便加try...catch... public Client() throws Exception{try {} catch (Exception e) {/*将来针对异常可能需要记录日志。所以需要感知错误。但是若异常不应当在这里 * 被处理时可以继续在catch中将其抛出。 * */ throw e; } }7 端口号用于?计算机中有许多应用正在连接网络,服务器通过IP地址传送到本机上,通过端口号判断接收数据的程序。

8 是否需要定义服务器端自身的IP地址和端口?不需要,系统已封装并创建。

9 public static void main(String[] args) {10 /* * 运行在服务端的java.netl.ServerSocket * 主要有两个作用: * 1:向系统申请对外的服务端口,客户端Socket就是通过这个端口与服务端程序建立连接的。 * 2:监听该服务端口,一旦一个客户端Socket通过该端口尝试建立联机,ServerSocket就会 * 感知并实例化一个Socket与该客户端进行通讯。 */11 服务端开始工作的方法是什么? public void start(){try {/* * ServerSocket提供方法: * Socket aeecpt() * 该方法是一个阻塞方法,用于监听服务端口,直到一个客户端链接上 * 为止,这里会返回一个Socket,通过该Socket就可以与该客户端进行通讯了。 * */ Socket socket = server.accept(); } catch (Exception e) {// TODO: handle exception } }package DAY11;/** * 聊天室服务端 * @author admin * */

import java.io.BufferedReader;import java.io.InputStream;import java.io.InputStreamReader;/* * 客户端与服务端连接传送数据需要符合TCP或UDP协议,而java中用Socket封装了该协议 * 因此创建客户端及服务端时便要实例化Socket对象(电话)用以互相传输数据, * 客户端的Socket可直接用java.net.Socket新建,而服务端要用java.net.ServerSocket来创建服务端的Socket接口,两个接口不同 * 客户端需要在构造中实例化一个socket对象,实例化socket对象需要传入服务端ip地址和端口号 */import java.net.ServerSocket;import java.net.Socket;public class Server {/* * 运行在服务端的java.netl.ServerSocket * 主要有两个作用: * 1:向系统申请对外的服务端口,客户端Socket就是通过这个端口与服务端程序建立连接的。 * 2:监听该服务端口,一旦一个客户端Socket通过该端口尝试建立联机,ServerSocket就会 * 感知并实例化一个Socket与该客户端进行通讯。Address Already In Use */ private ServerSocket server; /* * 服务端构造,用来初始化服务端 */ public Server() throws Exception{try {/* * 实例化ServerSocket的同时向系统申请服务端口,若当前系统其他应用 * 程序正在使用这个端口,那么这里的实例化会抛出地址被占用的异常。 * */ System.out.println("服务端正在启动..."); server = new ServerSocket(8081); System.out.println("服务端启动完毕。"); }catch(Exception e){e.printStackTrace(); } } /* * 服务端开始工作的方法 */ public void start(){try {/* * ServerSocket提供方法: * Socket aeecpt() * 该方法是一个阻塞方法,用于监听服务端口,直到一个客户端链接上 * 为止,这里会返回一个Socket,通过该Socket就可以与该客户端进行通讯了。 * */ System.out.println("等待客户端连接"); Socket socket = server.accept();//卡在这了 System.out.println("一个客户端连接了..."); /* * */ //用顶级接口接收输入流 InputStream in = socket.getInputStream(); //由于in为字节流,无法直接加载到br(有换行输出)上,所以需要先加载到isr上 InputStreamReader isr = new InputStreamReader(in,"UTF-8"); BufferedReader br = new BufferedReader(isr); while(true){String message = br.readLine(); System.out.println(message); } } catch (Exception e) {// TODO: handle exception } } public static void main(String[] args) {try{Server server = new Server(); server.start(); }catch(Exception e){e.printStackTrace(); System.out.println("服务端运行失败"); } }

}

12 何时需要定义内部类?属于外部类的一个子功能,需要单创建一个类时,定义在内部。且如果该类仅自己调用,还可定义为私有的。

13 如何同时接受多个客户端的信息?使用线程,将accept()实例化的socket传入线程中,循环该过程。

14 服务器是如何初始化的?通过创建ServerSocket对象,该对象用于申请对外的端口及创建Socket用以通讯(监听到请求连接后)

15 线程相当于封装了?流程。

16 提示需要create method时可能是什么原因?无 new .

17 打桩技巧——不要懒,每个点都打,

18 线程之间如何共享数据?将数据放在公共区域。

19 如何锁对象及判断是否有锁或属性以达到限制访问(互斥)?synchronized (allOut) {allOut.add(pw);}

20 编程思路整理技巧有?画图。

21 聊天 → 不用回一句就能显示(读写分离) → ip → 回复时间间隔

22 聊天室项目练习5次。

23 如何配置maven的xml文件?

24 字符流,基于低级流(字节流)

25 创建服务器及客户端的思路是?

相关文章Related

返回栏目>>