Java网络编程三--基于TCP协议的网络编程
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
import java.net.*;
import java.io.*; public class Client
{
public static void main(String[] args) throws IOException
{
System.out.println("Hello World!"); Socket s = new Socket("127.0.0.1",30000); BufferedReader br = new BufferedReader(new InputStreamReader(s.getInputStream())); System.out.println(br.readLine()); br.close(); s.close(); }
}
import java.net.*;
import java.io.*; public class Server
{
public static void main(String[] args) throws IOException
{
System.out.println("Hello World!"); ServerSocket serverSocket = new ServerSocket(30000); while(true)
{
Socket s = serverSocket.accept();
PrintStream ps = new PrintStream(s.getOutputStream());
ps.println("您好,收到连接请求");
ps.close();
s.close();
}
}
}
运行结果:略了
setSoTimeout(int timeout)//设置超时时长(超过timeout后会抛出SocketTimeoutException)
设置超时的另一种方法(Socket所有构造函数并没有提供指定超时的):
1.创建一个空连接的Socket对象:
2.调用connect(new InetSocketAddress(host,port), Int timeout);
下面是加入多线程的聊天程序:
半关闭的Socket:不适合保持持久通信状态的交互式应用
shutdownInput():关闭该Socket的输入流,,还能通过输出流输出数据
shutdownOutput():
使用NIO实现非阻塞通信:阻塞式--当程序执行输出输入操作后,在这些操作返回之前一直阻塞该线程,所以服务其端要为每个客户端提供一个独立线程进行处理,客户端多时,会导致服务器性能下降
NOI则可以让一个或几个有限线程同时处理所有客户端
Selector:SelectableChannel的多路复用器
非阻塞式的通信,,,,,,没写
Java网络编程三--基于TCP协议的网络编程的更多相关文章
- 学习笔记——网络编程3(基于TCP协议的网络编程)
TCP协议基础 IP协议是Internet上使用的一个关键协议,它的全称是Internet Protocol,即Internet协议,通常简称IP协议. 使用ServerSocket创建TCP服务 ...
- 网络编程——基于TCP协议的Socket编程,基于UDP协议的Socket编程
Socket编程 目前较为流行的网络编程模型是客户机/服务器通信模式 客户进程向服务器进程发出要求某种服务的请求,服务器进程响应该请求.如图所示,通常,一个服务器进程会同时为多个客户端进程服务,图中服 ...
- python 之 网络编程(基于TCP协议的套接字通信操作)
第八章网络编程 8.1 基于TCP协议的套接字通信 服务端套接字函数 s.bind() 绑定(主机,端口号)到套接字 s.listen() 开始TCP监听 s.accept() 被动接受TCP客户的连 ...
- (4)socket的基础使用(基于TCP协议的并发编程)
需要实现并发需要依靠socketserver 模块 socketserver模块下有几个功能 def __init__(self, request, client_address, server): ...
- 基于TCP协议的网络通讯流程
不多说了,先上个图: 从上面的图中可以看出来,基于TCP协议进行通讯可以大致分成以下几个阶段: 1. 首先是在服务器端, TCP Sever调用socket(), bind(), listen()完成 ...
- 基于TCP协议的网络编程
TCP通信协议是一种可靠的传输层协议,它在通信的两端各建立一个Socket,从而在通信的两端之间形成虚拟网络链路.一旦建立了虚拟的网络链路,两端的程序就可以通过虚拟链路进行通信.Java使用Socke ...
- 基于TCP协议的socket编程
什么是socket Socket是应用层与TCP/IP协议族通信的中间软件抽象层,它是一组接口.在设计模式中,Socket其实就是一个门面模式,它把复杂的TCP/IP协议族隐藏在Socket接口后面, ...
- Java修炼——基于TCP协议的Socket编程_双向通信_实现模拟用户登录
首先我们需要客户端和服务器端. 服务器端需要:1.创建ServerSocket对象.2.监听客户端的请求数据.3.获取输入流(对象流)即用户在客户端所发过来的信息. ...
- python 之网络编程(基于TCP协议Socket通信的粘包问题及解决)
8.4 粘包问题 粘包问题发生的原因: 1.发送端需要等缓冲区满才发送出去,造成粘包(发送数据时间间隔很短,数据了很小,会合到一起,产生粘包),这样接收端,就难于分辨出来了,必须提供科学的拆包机制. ...
随机推荐
- svn服务器发生变更,如何切换
参考链接: https://blog.csdn.net/jk110333/article/details/9301283 https://blog.csdn.net/emtit2008/article ...
- Django的文件上传以及预览、存储
思路: 文件上传通过前端的input标签,input设置display:none属性. 内容显示需要让前端通过<img>标签读取图片内容,可以通过<label>标签连接< ...
- React进阶篇(1) -- react-router4模块化
本篇内容: 单一的路由无嵌套 多层嵌套路由 获取路径中的参数 按需加载 单一的路由无嵌套 routers.js import Home from 'components/Home'; import N ...
- linux上使用tomcat及查看日志
启动 startup.sh #执行bin/startup.sh #启动tomcatbin/shutdown.sh #停止tomcattail -f logs/catalina.out #看tomcat ...
- uoj #298. 【CTSC2017】网络
#298. [CTSC2017]网络 一个一般的网络系统可以被描述成一张无向连通图.图上的每个节点为一个服务器,连接服务器与服务器的数据线则看作图上的一条边,边权为该数据线的长度.两个服务器之间的通讯 ...
- 洛谷P1550 [USACO08OCT]打井Watering Hole
P1550 [USACO08OCT]打井Watering Hole 题目背景 John的农场缺水了!!! 题目描述 Farmer John has decided to bring water to ...
- 浏览器HTTP_USER_AGENT汇总——Firefox、Chrome、IE9、IE8、IE7、IE6
结论: 浏览器 \ OS XP(IE6) XP(IE7) XP(IE8) Win7 x64(IE9) 猎豹浏览器2.0急速模式 Chrome/21 猎豹浏览器2.0兼容模式 IE6 ...
- hexo的jacman主题配置
获得更多资料欢迎进入我的网站或者 csdn或者博客园 这是在我搭建博客时用的主题,这个主题时基于pacman修改的,同时我也是借助于wuchong同时他还在一直更新.一下时我的一些基本配置: 相关文章 ...
- python中xml解析
import xml.dom.minidom input_xml_string = '''<root><a>hello</a></root>'''#打开 ...
- 50个php程序性能优化的方法,赶紧收藏吧!
1. 用单引号代替双引号来包含字符串,这样做会更快一些.因为 PHP 会在双引号包围的 字符串中搜寻变量,单引号则不会,注意:只有 echo 能这么做,它是一种可以把多个字符 串当作参数的“函数”(译 ...