网络通信中基于套接字输入流和输出流的创建

基本方法

要实现套接字的网络通信,需要分四个步骤完成:

  (1)创建套接字Socket,连接成功后形成网络连接通道;

  (2)由套接字对象Socket调用getInputStream()或getOutputStream()方法,分别返回具有套接字通信的基础输入流InputStream和输出流OutputStream对象作为参数,完成绑定套接字通信的输入流和输出流对象的创建。

  (3)用输入和输出流对象调用其对应方法的操作方式实现网络通信;

  (4)网络通信结束,需要关闭输入流和输出流对象,尤其要关闭套接字对象。

具体实现方法

  (1)基于套接字的字节输入流dis和输出流dos的创建

     dis调用readUTF()方法接收数据;

       dos调用writeUTF()方法发送数据;

Socket socket=new Socket("127.0.0.1", 8888);
        try {
            DataInputStream dis=new DataInputStream(socket.getInputStream());
            DataOutputStream dos=new DataOutputStream(socket.getOutputStream());
                   ……
            dos.writeUTF("Cilent Test");
            dos.flush();
            dos.close();
        } catch (Exception e) {
            // TODO: handle exception
        }finally{
            socket.close();
}                    

  (2)基于套接字具有缓冲的字节输入流dinB和输出流dosB的创建

DataInputStream dinB=new DataInputStream(new BufferedInputStream(socket.getInputStream()));
DataOutputStream dosB=new DataOutputStream(new BufferedOutputStream(socket.getOutputStream()));

  (3)基于套接字并具有缓冲的字符读取器br和写入器bw或文本输出流pw的创建

      如果以字符为单位的读取器和写入器来实现网络通信,必须将套接字的字节流用转换器转换为字符流输入,或将字符流装换为套接字的字节流输出。

      转换器实现如下:

new InputStreamReader(socket.getInputStream());    //字节输入流转换为字符输入流
new OutputStreamWriter(socket.getOutputStream());  //字符输出流转换为字节输出流

      以下将绑定有套接字的转换器对象作为缓冲字符读取器br和字符写入器bw的构造函数参数,建立br和bw对象,由此可达到字符操作的高效率。

      建立br和bw对象代码如下:

BufferedReader br=new BufferedReader(new InputStreamReader(socket.getInputStream()));
BufferedWriter bw=new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));

      如果用字符格式化文本输出流PrintWriter代替写入器bw实现字符输出流,其对象pw构造函数的第一个参数为写入对象即可;第二个参数为true,表示数据写到pw进入缓冲区,系统自动刷新输出缓冲区,由此来确保数据送出。

PrintWriter writer=new PrintWriter(socket.getOutputStream(),true);

    

时间: 2024-08-07 13:27:50

网络通信中基于套接字输入流和输出流的创建的相关文章

APUE中网络套接字一章——使用pthread改写远程时间服务器

最近在看<Unix环境高级编程>一书,我一直对网络编程有兴趣,所以就直接跳到了网络套接字这一章. 这一章中有一个示例程序:一个TCP客户端向服务器发送连接请求,服务器在接受请求后,调用uptime命令 并将结果返回给客户端,客户端再将其打印出来. 因为前面刚看过线程那一章,所以我想把服务器改造成多线程的,以便同时服务多个线程.但是却碰到 一个问题,调试了半天还是没有进展(linux下调试我真的不是很会),google了下也没找到答案.索性先po 上来,整理下思路,如果有园子里的朋友能够帮忙解答

套接字输入流——InputStream

输入缓冲装置里面必须要包含读取字符的通道,否则就谈不上缓冲了,这个通道就是InputStream,它属于jdk中java.io包的类,有了它我们就可以从源头读取字符,它的来源可以有多种多样,这里主要探讨的是从socket连接中读取字符. 如上图,InputStream充当从操作系统底层读取socket字节的通道,当客户端与服务器端建立起连接后就可以看成存在一条通道供双方传递信息,客户端写入的字符串通过通道传递到服务器端,应用层则通过InputStream读取字节流.应用层最小单位为8位(字节),

python3中socket套接字的编码问题解决

一.TCP 1.tcp服务器创建 #创建服务器 from socket import * from time import ctime #导入ctime HOST = '' #任意主机 PORT = 21567 #随机提供个端口号 BUFSIZ = 1024 # 缓冲区大小设置为1KB,可以根据网络性能和程序需要改变这个容量 ADDR = (HOST, PORT) tcpSerSock = socket(AF_INET, SOCK_STREAM) #分配了 TCP 服务器套接字 tcpSerSo

基于套接字通信(tcp)

一.基于tcp协议套接字通信(简单版) 套接字socket:套接字是位于应用层与传输层之间,将传输层以下的协议都封装成接口,提供给应用层使用,应用层只需要调用socket的接口或者按照socket的标准编写程序自然遵循tcp/udp协议 服务端: import socket # 1.买手机phone = socket.socket(socket.AF_INET, socket.SOCK_STREAM) # tcp称为流式协议,udp称为数据报协议SOCK_DGRAM# print(phone)

Python学习-15.Python的中的套接字socket

Python应用最广泛的要数web方面了.因此,socket显得十分重要. 要使用socket,必须引入socket模块,因此在Python脚本开头先写入 1 import socket 学过socket的都知道,就是客户端和服务端的通信. 因此新建client.py和server.py文件. 先编写server.py文件: 1 import socket 2 3 # 创建 TCP 协议的套接字. 4 server = socket.socket(socket.AF_INET,socket.SO

Day35:基于UDO的套接字、粘包问题

一.基于UDP的套接字 UDP服务端 ss = socket() #创建一个服务器的套接字 ss.bind() #绑定服务器套接字 inf_loop: #服务器无限循环 cs = ss.recvfrom()/ss.sendto() # 对话(接收与发送) ss.close() # 关闭服务器套接字 UDP客户端 cs = socket() # 创建客户套接字 comm_loop: # 通讯循环 cs.sendto()/cs.recvfrom() # 对话(发送/接收) cs.close() #

VC基于消息的异步套接字

用WSAStartup,需要在StdAfx.h头文件中需要声明 #include    #pragma   comment(lib,"WS2_32.lib") 用AfxSocket,需要在StdAfx.h头文件中需要声明 #include 用到了两种,则需要: #include    #pragma   comment(lib,"WS2_32.lib") #include 上述方法是否可行,需要验证?(在三门峡自动化收购管理系统中,用到了上述内容) 1.在[项目名.

一起talk C栗子吧(第一百五十八回:C语言实例--基于AF_INET域的流套接字通信)

各位看官们,大家好,上一回中咱们说的是基于AF_UNIX域的数据报套接字通信的例子,这一回咱们说的例子是:基于AF_INET域的流套接字通信 .闲话休提,言归正转.让我们一起talk C栗子吧! 看官们,我们在上一回中一起制作了我们的第二道佳肴是:基于AF_UNIX域的数据报套接字通信.今天,我将和大家一起制作第三道佳肴:基于AF_INET域的流套接字通信. 制作第三道佳肴的菜谱:流套接字过程. 制作第三道佳肴的食材:流套接字的接口,套接字属性,套接字地址信息. 看官们,以上的内容,我们在前面章

Unix网络编程学习笔记之第8章 基于UDP套接字编程

一. UDP C/S的典型函数调用 UDP没有像TCP那样的连接,客户端直接sendto向某服务器发送数据,服务器端一直recvfrom阻塞,以接收任何客户端发送的数据. 二. sendto和recvfrom函数 int sendto(int sockfd, const void* buff, size_t nbytes, int flag, const struct sockaddr* to, socklen_taddrlen); int recvfrom(int sockfd, void*