Socket通讯简单学习
2014-05-30 15:55
218 查看
Socket通讯简单学习
对于一个功能齐全的Socket,都要包含以下基本结构,其工作过程包含以下四个基本的步骤:
(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();
}
}
}
对于一个功能齐全的Socket,都要包含以下基本结构,其工作过程包含以下四个基本的步骤:
(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();
}
}
}
相关文章推荐
- Socket通讯简单学习
- 基于tcp/ip协议的Socket网络通讯 --> 简单的数据传送和库构造
- Socket简单通讯
- Winsock学习1:用winsock实现socket通讯的server端。
- 一个简单而又灵活的IOCP模块——完成端口通讯服务器(IOCP Socket Server)设计(四)
- ServerSocket的一个简单例子,学习backlog参数的设置,即可以接受客户端的数量
- Winsock学习2:用winsock实现socket通讯的client端。
- 简单学习socket (一)
- UNIX环境高级编程学习之第十六章网络IPC:套接字 - 简单UDP Socket 通信
- UNIX环境高级编程学习之第十六章网络IPC:套接字 - 简单TCP Socket 通信
- window平台下gtk+socket简单学习。
- socket通讯简单例子
- 简单的java socket通讯JAVA技术文章
- 一个简单而又灵活的IOCP模块——完成端口通讯服务器(IOCP Socket Server)设计(四)
- Socket通讯编程实现简单的任意聊天程序
- 基于socket的简单通讯
- 学习Socket ,写简单网络监视程序心得!
- c#简单的socket通讯demo
- 3个学习Socket编程的简单例子:TCP Server/Client, Select
- 简单的socket通讯