Socket通讯简单学习
2014-03-17 14:35
211 查看
对于一个功能齐全的Socket,都要包含以下基本结构,其工作过程包含以下四个基本的步骤:
(1) 创建Socket;
(2) 打开连接到Socket的输入/出流;
(3) 按照一定的协议对Socket进行读/写操作;
(4) 关闭Socket.
第三步是程序员用来调用Socket和实现程序功能的关键步骤,其他三步在各种程序中基本相同
在创建socket时如果发生错误,将产生IOException,在程序中必须对之作出处理。所以在创建Socket或ServerSocket是必须捕获或抛出例外。
(1)下面是一个典型的创建客户端Socket的过程。
(2)下面是一个典型的创建Server端ServerSocket的过程。
以上的程序是Server的典型工作模式,只不过在这里Server只能接收一个请求,接受完后Server就退出了。实际的应用中总是让它不停的循环接收,一旦有客户请求,Server总是会创建一个服务线程来服务新来的客户,而自己继续监听。程序中accept()是一个阻塞函数,所谓阻塞性方法就是说该方法被调用后,将等待客户的请求,直到有一个客户启动并请求连接到相同的端口,然后accept()返回一个对应于客户的socket。这时,客户方和服务方都建立了用于通信的socket,接下来就是由各个socket分别打开各自的输入/输出流。
我们了解了一下原理,下面可以着手编写
服务端的编写
Server.java
客户端的编写
client.java
我们先编译sever.java进行监听
后编译client.java
(1) 创建Socket;
(2) 打开连接到Socket的输入/出流;
(3) 按照一定的协议对Socket进行读/写操作;
(4) 关闭Socket.
第三步是程序员用来调用Socket和实现程序功能的关键步骤,其他三步在各种程序中基本相同
在创建socket时如果发生错误,将产生IOException,在程序中必须对之作出处理。所以在创建Socket或ServerSocket是必须捕获或抛出例外。
(1)下面是一个典型的创建客户端Socket的过程。
try{ Socket socket=new Socket("127.0.0.1",4700); //127.0.0.1是TCP/IP协议中默认的本机地址 }catch(IOException e){ System.out.println("Error:"+e); }
(2)下面是一个典型的创建Server端ServerSocket的过程。
ServerSocket server=null; try { server=new ServerSocket(4700); //创建一个ServerSocket在端口4700监听客户请求 }catch(IOException e){ System.out.println("can not listen to :"+e); } Socket socket=null; try { socket=server.accept(); //accept()是一个阻塞的方法,一旦有客户请求,它就会返回一个Socket对象用于同客户进行交互 }catch(IOException e){ System.out.println("Error:"+e); }
以上的程序是Server的典型工作模式,只不过在这里Server只能接收一个请求,接受完后Server就退出了。实际的应用中总是让它不停的循环接收,一旦有客户请求,Server总是会创建一个服务线程来服务新来的客户,而自己继续监听。程序中accept()是一个阻塞函数,所谓阻塞性方法就是说该方法被调用后,将等待客户的请求,直到有一个客户启动并请求连接到相同的端口,然后accept()返回一个对应于客户的socket。这时,客户方和服务方都建立了用于通信的socket,接下来就是由各个socket分别打开各自的输入/输出流。
我们了解了一下原理,下面可以着手编写
服务端的编写
Server.java
package net; import java.net.*; import java.io.*; public class server { public static void main(String[] args) { ServerSocket ss=null; Socket s=null; try{ ss=new ServerSocket(6000);//创建一个ServerSocket在端口监听客户请求 s=ss.accept();//accept()是一个阻塞的方法,一旦有客户请求,它就会返回一个Socket对象用于同客户进行交互 OutputStream os=s.getOutputStream();//获取输出流 InputStream is=s.getInputStream();//获取出入流 os.write("hello world".getBytes());//输出流向客户端发送数据 //输入流从网络上读取数据 byte[] buf=new byte[100]; int length=is.read(buf); System.out.println(new String(buf,0,length) ); os.close();//关闭输出流 is.close();//关闭输入流 s.close();关闭客户端 ss.close();关闭服务端 } catch(Exception e) { e.printStackTrace(); } } }
客户端的编写
client.java
package net; import java.net.*; import java.io.*; public class Client { public static void main(String[] args) { try{ Socket s=new Socket(InetAddress.getByName(null),6000); //Socket s=new Socket("127.0.0.1",6000);//创建客户端套接子 OutputStream os=s.getOutputStream();//获取输出流 InputStream is=s.getInputStream();//获取输入流 byte[]buf=new byte[100]; int len=is.read(buf); System.out.println(new String(buf,0,len)); os.write("hello ,this is fan".getBytes()); os.close(); is.close(); s.close(); }catch(Exception e) { e.printStackTrace(); } } }
我们先编译sever.java进行监听
后编译client.java
相关文章推荐
- Socket通讯简单学习
- Socket通讯简单实例
- NodeJS+Express+Socket.io的简单及时通讯
- socket通讯简单例子
- 一个简单的基于socket的通讯处理程序
- Socket 学习笔记——InetAdress 最简单的体验
- 基于C#的Socket简单通讯
- Socket学习select服务器最简单的客户端
- windows的socket_tcp客服端端与linux的socket_tc服务端简单通讯
- Java Socket学习(一)——Socket简单连接
- python学习之路---socket简单练习获取网址域名
- [转]基于C#的Socket简单通讯
- socket TCP简单通讯
- [Linux] 最简单的socket通讯例子
- erlang和java的socket通讯----最简单,初次实现。
- Python学习-socket实现简单ssh(主要内容)
- Node.js socket.io前端后端通讯简单例子
- 学习 NodeJS 第八天:Socket 通讯实例
- 简单的C# Socket 通讯,可传文件
- Java实现简单的Socket服务器与客户端字符串通讯(适合初学者阅读)