博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Java网络编程三--基于TCP协议的网络编程
阅读量:4664 次
发布时间:2019-06-09

本文共 2297 字,大约阅读时间需要 7 分钟。

ServerSocket对象用于监听来自客户端的Socket连接,如果没有连接,它将一直处于等待状体

  Socket accept():如果接收到客户端的连接请求,该方法返回一个与客户端对应Socket对象,否则该方法将一直处于等待状态,线程也被阻塞

  提供了三个构造器:

    ServerSocket(int port):监听port端口(端口号指定大于1024)

    ServerSocket(int port , int backblog):????????????backlog有啥用还没查???????????

    ServerSocket(int port , int backblog, InetAddress localAddr):将serversocket绑定到指定IP的地址(当机器存在多个IP地址时)

Socket

  Socket(InetAddress/String remoteAddress, int port, InetAddress localAddr, int localPort):创建连接到远程主机,端口的连接,并制定本机的IP地址和端口(适用于本机有多个IP地址)

  Socket(InetAddress/String remoteAddress, int port):创建连接到远程主机,端口好的Socket,使用本机默认的ip地址,和端口号

  InputStream getInputStream():返回输入流,程序可以通过输入流从Socket中读取数据

  OutputStream getOutputStream():返回该Socket的输出流,程序通过输出流向Socket中写数据

一个简单的例子:Client + Server

1 import java.net.*; 2 import java.io.*; 3  4 public class  Client 5 { 6     public static void main(String[] args) throws IOException 7     { 8         System.out.println("Hello World!"); 9 10         Socket s = new Socket("127.0.0.1",30000);11 12         BufferedReader br = new BufferedReader(new InputStreamReader(s.getInputStream()));13 14         System.out.println(br.readLine());15 16         br.close();17 18         s.close();19 20     }21 }
1 import java.net.*; 2 import java.io.*; 3  4  5 public class Server 6 { 7     public static void main(String[] args) throws IOException  8     { 9         System.out.println("Hello World!");10 11         ServerSocket serverSocket = new ServerSocket(30000);12 13         while(true)14         {15             Socket s = serverSocket.accept();16             PrintStream ps = new PrintStream(s.getOutputStream());17             ps.println("您好,收到连接请求");18             ps.close();19             s.close();20         }21     }22 }

运行结果:略了

  setSoTimeout(int timeout)//设置超时时长(超过timeout后会抛出SocketTimeoutException)

  设置超时的另一种方法(Socket所有构造函数并没有提供指定超时的):

    1.创建一个空连接的Socket对象:

    2.调用connect(new InetSocketAddress(host,port), Int timeout);

下面是加入多线程的聊天程序:

 

 

 

 

 

 

  半关闭的Socket:不适合保持持久通信状态的交互式应用

    shutdownInput():关闭该Socket的输入流,,还能通过输出流输出数据

    shutdownOutput():

  使用NIO实现非阻塞通信:阻塞式--当程序执行输出输入操作后,在这些操作返回之前一直阻塞该线程,所以服务其端要为每个客户端提供一个独立线程进行处理,客户端多时,会导致服务器性能下降

              NOI则可以让一个或几个有限线程同时处理所有客户端

     Selector:SelectableChannel的多路复用器

 

 

 

    非阻塞式的通信,,,,,,没写

 

转载于:https://www.cnblogs.com/xiaochenztx/p/8543446.html

你可能感兴趣的文章
01_12_Struts2_访问Web元素
查看>>
YII 数据库查询
查看>>
用block变量来对字符数组对象进行排序
查看>>
使用Net.Sockets.TcpListener和Net.Sockets.TcpClient进行图片传输时怎样精确控制接收缓存数组大小...
查看>>
【黑马Android】(04)数据库的创建和sql语句增删改查/LinearLayout展示列表数据/ListView的使用和BaseAdater/内容提供者创建...
查看>>
怎样使用 RMAN 增量备份恢复 data guard log gap(日志断档)
查看>>
盛大 Bambook 手机
查看>>
[Js-Spring]Bean的装配
查看>>
织梦调用指定顶级栏目名称的方法
查看>>
170210、JAVA中List、Map、Set的区别与选用
查看>>
常用的JQuery UI框架
查看>>
CSS之概览
查看>>
java语法体系
查看>>
移动js
查看>>
.net core 记录
查看>>
一个快速将十六进制串转十进制数的方法
查看>>
VS中的build events
查看>>
HDU 1556 线段树或树状数组,插段求点
查看>>
2016 ECJTU - STL
查看>>
codeforces 964D 思维,dfs
查看>>