Java 网络通信必备之socket通信基本原理介绍
Java socket通信基本原理介绍
Java socket通信在不断的进行相关代码的开发,下面我们就看看如何才能更好的使用有关技术为我们的编程工作带来一定的帮助。
作者:佚名来源:互联网|2010-03-18 20:13
Java socket通信在Java语言中是一个使用很广泛的工具,下面我们就来仔细的学习下有关的方法。这对大家在以后的使用中有所帮助,只有不断的学习才能更好的使用。
所谓Java socket通信通常也称作"套接字",用于描述IP地址和端口,是一个通信链的句柄。应用程序通常通过"套接字"向网络发出请求或者应答网络请求。
以J2SDK-1.3为例,Socket和ServerSocket类库位于java.net包中。ServerSocket用于服务器端, Socket是建立网络连接时使用的。在连接成功时,应用程序两端都会产生一个Socket实例,操作这个实例,完成所需的会话。对于一个网络连接来说, 套接字是平等的,并没有差别,不因为在服务器端或在客户端而产生不同级别。不管是Socket还是ServerSocket它们的工作都是通过 SocketImpl类及其子类完成的。
重要的Socket API:
java.net.Socket继承于java.lang.Object,有八个构造器,其方法并不多,下面介绍使用最频繁的三个方法,其它方法大家可以见JDK-1.3文档。Accept方法用于产生"阻塞",直到接受到一个连接,并且返回一个客户端的Socket对象实例。"阻塞"是一个术语,它使程序运行暂时"停留"在这个地方,直到一个会话产生,然后程序继续;通常"阻塞"是由循环产生的。
getInputStream方法获得网络连接输入,同时返回一个IutputStream对象实例。
getOutputStream方法连接的另一端将得到输入,同时返回一个OutputStream对象实例。
注意:其中getInputStream和getOutputStream方法均会产生一个IOException,它必须被捕获,因为它们返回的流对象,通常都会被另一个流对象使用。
如何开发一个Server-Client模型的程序
Java socket通信开发原理:
服务器,使用ServerSocket监听指定的端口,端口可以随意指定(由于1024以下的端口通常属于保留端口,在一些操作系统中不可以随意使用,所以建议使用大于1024的端口),等待客户连接请求,客户连接后,会话产生;在完成会话后,关闭连接。
客户端,使用Java socket通信对网络上某一个服务器的某一个端口发出连接请求,一旦连接成功,打开会话;会话完成后,关闭Socket。客户端不需要指定打开的端口,通常临时的、动态的分配一个1024以上的端口。
重要的Socket API:
java.net.Socket继承于java.lang.Object,有八个构造器,其方法并不多,下面介绍使用最频繁的三个方法,其它方法大家可以见JDK-1.3文档。Accept方法用于产生"阻塞",直到接受到一个连接,并且返回一个客户端的Socket对象实例。"阻塞"是一个术语,它使程序运行暂时"停留"在这个地方,直到一个会话产生,然后程序继续;通常"阻塞"是由循环产生的。
getInputStream方法获得网络连接输入,同时返回一个IutputStream对象实例。
getOutputStream方法连接的另一端将得到输入,同时返回一个OutputStream对象实例。
注意:其中getInputStream和getOutputStream方法均会产生一个IOException,它必须被捕获,因为它们返回的流对象,通常都会被另一个流对象使用。
如何开发一个Server-Client模型的程序
Java socket通信开发原理:
服务器,使用ServerSocket监听指定的端口,端口可以随意指定(由于1024以下的端口通常属于保留端口,在一些操作系统中不可以随意使用,所以建议使用大于1024的端口),等待客户连接请求,客户连接后,会话产生;在完成会话后,关闭连接。
客户端,使用Java socket通信对网络上某一个服务器的某一个端口发出连接请求,一旦连接成功,打开会话;会话完成后,关闭Socket。客户端不需要指定打开的端口,通常临时的、动态的分配一个1024以上的端口。
下面和大家分享的是服务器的实现代码。
- import java.net.*;
- import java.io.*;
- import java.awt.event.ActionEvent;
- import java.awt.event.ActionListener;
- public class talkServer
- { public static void main(String[] args)
- { try
- { file://建立服务器
- ServerSocket server = new ServerSocket(9998);
- int i=1;
- for(;;)
- { Socket incoming = server.accept();
- new ServerThread(incoming,i).start();
- i++;
- }
- }catch (IOException ex){
- ex.printStackTrace();
- }
- }
- }
- class ServerThread extends Thread implements ActionListener
- {
- private int threadNum;
- private Socket socket;
- talkServerFrm t;
- BufferedReader in;
- PrintWriter out;
- private boolean talking=true;
- public ServerThread(Socket s,int c)
- { threadNum = c;
- socket = s;
- }
- public void actionPerformed(ActionEvent e)
- { Object source = e.getSource();
- try{
- if(source==t.btnSend)
- { out.println(t.getTalk());
- t.clearTalk();
- }else
- if(source==t.btnEnd)
- { out.println("谈话过程被对方终止");
- out.close();
- in.close();
- talking = false;
- }
- }catch(IOException ex){
- }
- }
- public void run()
- { try{
- t=new talkServerFrm(new Integer(threadNum).toString(),this);
- t.setSize(500,500);
- t.show();
- in = new BufferedReader(new
- InputStreamReader(socket.getInputStream()));
- out = new PrintWriter(socket.getOutputStream(),true);
- }catch(Exception e){
- }
- new Thread()
- { public void run()
- { try{
- while(true)
- { checkInput();
- sleep(1000);
- }
- }catch (InterruptedException ex){
- }catch(IOException ex){
- }
- }
- }.start();
- while(talking)
- { }
- t.dispose();
- }
- private void checkInput() throws IOException
- { String line;
- if((line=in.readLine())!=null)
- t.setPartner(line); file://这是界面类里的方法,
- file://用来将line的内容输出到用户界面
- }
- }
到此,java中的socket网络编程就给大家介绍完啦
Java 网络通信必备之socket通信基本原理介绍相关推荐
- 串口通信基本原理介绍
串口通信基本原理介绍 一. 什么是串口通信? 串行通信是指仅用一根接收线和一根发送线就能将数据以位进行传输的一种通讯方式.尽管串行通信的速度比按字节传输的并行通信慢,但是串口可以在仅仅使用两根线的情况 ...
- Java网络编程和NIO详解1:JAVA 中原生的 socket 通信机制
JAVA 中原生的 socket 通信机制 转载自:https://github.com/jasonGeng88/blog 当前环境 jdk == 1.8 知识点 socket 的连接处理 IO 输入 ...
- Android Java 必备:Socket通信
目标 Demo是通过Java ServerSocket 和 Socket 通信实现客户端发送消息和发送文件到服务器,服务器接收到消息和文件,并且实现解决inputStream.read()的阻塞问题思 ...
- [其他]JAVA与C#的Socket通信
在日常的开发中,不同的传感器支持的开发语言常常是不同的.例如Kinect一般是用C++开发的,Leapmotion用JAVA开发比较多. 去年暑假(17年暑假)做的一个项目是:用Leapmotion捕 ...
- connect: 网络不可达_Java网络编程和NIO详解1:JAVA 中原生的 socket 通信机制
本文转自:https://github.com/jasonGeng88/blog 本系列文章将整理到我在GitHub上的<Java面试指南>仓库,更多精彩内容请到我的仓库里查看 https ...
- Android java和C的Socket通信demo(可用)
原址 关于Android应用与Framework的socket通信,相信关心这个问题的朋友们已经看过<android使用socket使底层和framework通信>这篇文章,美中不足的是作 ...
- java与C语言socket通信(C客户端java服务端)
服务器端代码 MyServer.java import java.io.*; import java.net.*; import java.util.*;public class MyServer { ...
- socket通信简单介绍
"一切皆Socket!" 话虽些许夸张,可是事实也是,如今的网络编程差点儿都是用的socket. --有感于实际编程和开源项目研究. 我们深谙信息交流的价值,那网络中进程之间怎样通 ...
- java整合Apache-mima进行socket通信
项目中遇到一个需求,需要安卓多客户端连接java后台进行相互通信,保持长连接,所以想到用socket来做,在网上看了一堆资料后,发现了mina框架,下面把自己整合的代码记录一下. jar包自己在网上找 ...
最新文章
- 呵呵,哈哈,嘿嘿,从今天起就开始写博客文了
- 【AI】吴恩达斯坦福机器学习中文笔记汇总
- 套上这个壳,手机自己“跑步”去充电
- 【学术相关】普通在读奶爸博士生的一年总结!
- 计算机网络中缓存技术,编程达人
- javascript forEach方法
- no system images installed for this target这个问题如何解决?
- 数据是如何从浏览器传输到服务器
- window 下注册 redis服务
- 建表mysql语句吗_mysql建表语句问题
- 方方格子授权码_助力上分!灌篮高手正版授权手游礼包码攻略及防守技巧汇总...
- linux mv中途进程断掉,shell入门
- 攻防世界杂项(misc)--新手练习区(详解十二道题完结,附件做题过程中使用到的各种工具和网站)
- Apache Drill Architecture Introduction
- 模仿猫眼电影静态网页展示
- dnf服务器炸团门票怎么找回,DNF最新BUG,玩家打团买票后材料消失,无法引炸直接退队!...
- 一目了然凉哥为大家倾力打造的付费专栏
- C#使用itextsharp生成PDF文件
- 计算机大白菜是什么东西,大白菜u盘启动怎么样在计算机里查看图片
- 如何写创业计划书[转]
热门文章
- 密码学系列之:memory-bound函数
- Spring Boot devtool的使用
- Fabric的6大特性
- 记录一次大对象导致的Java堆内存溢出问题
- Linux 网络编程——网络字节序(三)
- 1019 General Palindromic Number (20分)_18行代码AC
- 【面试必备】GET和POST两种基本请求方法的区别
- 【传智播客】Javaweb程序设计任务教程 黑马程序员 第六章 课后答案
- 21行代码AC_ 试题H: 修改数组【解题报告】
- (*长期更新)软考网络工程师学习笔记——Section 4 物理层的其它知识