前段时间用Java写了点网络编程,写几篇博客纪念一下。。。
本文参考:http://www.cnblogs.com/linzheng/archive/2011/01/23/1942328.html
其中关于网编的基础内容,讲解的很好!
什么是Socket?
网络上的两个程序通过一个双向的通讯连接实现数据的交换,这个双向链路的一端称为一个Socket。
Socket通常用来实现客户方和服务方的连接。
Socket是TCP/IP协议的一个十分流行的编程界面,一个Socket由一个IP地址和一个端口号唯一确定。
Socket通讯的过程
Server端Listen(监听)某个端口是否有连接请求;
Client端向Server 端发出Connect(连接)请求;
Server端向Client端发回Accept(接受)消息;
Server端和Client 端通过Send,Write等方法与对方通信。
基本的步骤
创建Socket;
打开连接到Socket的输入/出流;
按照一定的协议对Socket进行读/写操作;
关闭Socket。
习惯性的写Demo:
先看Server端:
package me.hello.socket; import java.io.BufferedReader; import java.io.InputStreamReader; import java.io.PrintWriter; import java.net.ServerSocket; import java.net.Socket; /** * God Bless You! * Author: Fangniude * Date: 2013-07-15 */ public class AncientServer { public static void main(String args[]) { try { ServerSocket server = null; try { server = new ServerSocket(4700); //创建一个ServerSocket在端口4700监听客户请求 } catch (Exception e) { System.out.println("can not listen to:" + e);//出错,打印出错信息 } Socket socket = null; try { System.out.println("Server已经启动,监听端口: " + server.getLocalPort() + ", 等待客户端注册。。。"); socket = server.accept();//使用accept()阻塞等待客户请求,有客户请求到来则产生一个Socket对象,并继续执行 System.out.println("有一个客户端注册上来了。。。"); System.out.println("Client:" + socket.getRemoteSocketAddress()); System.out.println("Server IP:" + socket.getLocalAddress() + ", Port:" + socket.getLocalPort()); } catch (Exception e) { System.out.println("Error." + e); //出错,打印出错信息 } String line; BufferedReader is = new BufferedReader(new InputStreamReader(socket.getInputStream()));//由Socket对象得到输入流,并构造相应的BufferedReader对象 PrintWriter os = new PrintWriter(socket.getOutputStream());//由Socket对象得到输出流,并构造PrintWriter对象 System.out.println("\n等待客户端输入。。。"); line = is.readLine();//从标准输入读入一字符串 while (!line.equals("bye")) {//如果该字符串为 "bye",则停止循环 System.out.println("Client发来:" + line); os.println("Server已收到刚发送的:" + line); //向客户端输出该 os.flush();//刷新输出流,使Client马上收到该字符串 System.out.println("\n等待客户端输入。。。"); line = is.readLine(); //从系统标准输入读入一字符串 } //继续循环 os.close(); //关闭Socket输出流 is.close(); //关闭Socket输入流 socket.close(); //关闭Socket server.close(); //关闭ServerSocket } catch (Exception e) { System.out.println("Error:" + e);//出错,打印出错信息 } } }
来看看客户端:
package me.hello.socket; import java.io.BufferedReader; import java.io.InputStreamReader; import java.io.PrintWriter; import java.net.Socket; /** * God Bless You! * Author: Fangniude * Date: 2013-07-15 */ public class AncientClient { public static void main(String args[]) { try { Socket socket = new Socket("127.0.0.1", 4700); //向本机的4700端口发出客户请求 BufferedReader sin = new BufferedReader(new InputStreamReader(System.in)); //由系统标准输入设备构造BufferedReader对象 PrintWriter os = new PrintWriter(socket.getOutputStream()); //由Socket对象得到输出流,并构造PrintWriter对象 BufferedReader is = new BufferedReader(new InputStreamReader(socket.getInputStream())); //由Socket对象得到输入流,并构造相应的BufferedReader对象 System.out.println("已经与Server建立连接。。。。"); System.out.println("\n请输入要发送的信息:"); String readline = sin.readLine(); //从系统标准输入读入一字符串 while (!readline.equals("bye")) { //若从标准输入读入的字符串为 "bye"则停止循环 os.println(readline); //将从系统标准输入读入的字符串输出到Server os.flush(); //刷新输出流,使Server马上收到该字符串 System.out.println(is.readLine()); //从Server读入一字符串,并打印到标准输出上 System.out.println("\n请输入要发送的信息:"); readline = sin.readLine(); //从系统标准输入读入一字符串 } //继续循环 os.close(); //关闭Socket输出流 is.close(); //关闭Socket输入流 socket.close(); //关闭Socket } catch (Exception e) { System.out.println("Error" + e); //出错,则打印出错信息 } } }
相关推荐
JAVA Socket教程 Java网络编程之传输控制协议 Socket套接字—Java套接字编程
java socket教程java socket教程java socket教程
java socket client 断线重连的简单实现 有什么意见可以提哦
java socket使用加密协议传输对象
Java Socket 聊天通信演示代码 Java Socket 聊天通信演示代码
Java Socket 操作 Demo import java.awt.Color; import java.awt.Dimension; import java.awt.Point; import java.awt.event.KeyAdapter; import java.awt.event.KeyEvent; import java.io.BufferedReader; import ...
java socket处理硬件传过来的16进制数据的工具类,包含大小端转换、byte[]数组转换为16进制的字符串、byte[]转ByteBuffer、16进制字符串转换为byte数组等
java socket 学习资料java socket 学习资料java socket 学习资料java socket 学习资料java socket 学习资料
java socket源码解析 java socket源码解析 java socket源码解析 java socket源码解析
java socket USB和 串口通讯,使用java程序与硬件通讯的三种方式。
java socket nginx tcp转发 用户真实IP测试,文章请看我的博客
SpringMVC的Socket实现+Java Tomcat websocket实现+Java Socket通信实现 +Java UDP通信实现。websocket_study.rar 为springMVC版本的socket实现 websocket02.rar 里面包含tomcat的websocket实现+java socket双向通信...
Java Socket编程.pdf Java Socket编程.pdf Java Socket编程.pdf
Java Socket编程 PC端程序 用来传输文件 包括服务器、客户端
Java Socket传输图片源代码;短小精悍,适合初学者学习参考使用
java socket 聊天系统 java传输文件 多线程聊天系统
基于Java socket的聊天室还带有窗口抖动功能
Java Socket 实现SMTP邮件发送,支持SSL/TSL
Java Socket网络编程.pdf 学习资料 复习资料 教学资源
java Socket 编程配套源码