Java Socket编程示例
一、Socket简介:
1、什么是Socket
网络上的两个程序通过一个双向的通讯连接实现数据的交换,这个双向链路的一端称为一个Socket。Socket通常用来实现客户方和服务方的连接。Socket是TCP/IP协议的一个十分流行的编程界面,一个Socket由一个IP地址和一个端口号唯一确定。在Java环境下,Socket编程主要是指基于TCP/IP协议的网络编程。
二、Socket通信实例①:
功能:客户端发送一条请求,服务器端接收,打印,向客户端返回一条信息,客户端接收,打印。
1、服务器端代码:
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket; /**
* 该服务器端接收客户端发送的数据,并向客户端发送一条响应信息
* @author Administrator
*
*/
public class MyServer { public static void main(String[] args) { ServerSocket server = null;
Socket client = null;
PrintWriter pw = null;
BufferedReader br = null;
try { server = new ServerSocket(6789);
//获取连接
client = server.accept();
pw = new PrintWriter(client.getOutputStream()); //接收客户端传递的数据
br = new BufferedReader(new InputStreamReader(client.getInputStream()));
System.out.print("Info From Client:");
//此处仅读一行,若采用while()的方式,如果读取不到结束标记,会阻塞
System.out.println(br.readLine());
System.out.println("server over..."); //向客户端写回数据
pw.print("Hello Client!! I am Server!!!\r\n");
pw.flush(); } catch (IOException e) {
e.printStackTrace();
} finally {
//关闭资源
try {
if(br != null) {
br.close();
}
if(pw != null) {
pw.close();
}
if(client != null) {
client.close();
}
if(server != null) {
server.close();
}
} catch (IOException e) {
e.printStackTrace();
} }
} }
2、客户端代码:
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.Socket;
import java.net.UnknownHostException; /**
* 该客户端类仅实现以下功能:
* 向服务器发送信息,接收从服务器返回的数据,仅读取一行
* @author Administrator
*
*/
public class MyClient { public static void main(String[] args) { Socket socket = null;
PrintWriter pw = null;
BufferedReader br = null;
try {
//指定服务器地址+端口
socket = new Socket("127.0.0.1", 6789);
pw = new PrintWriter(socket.getOutputStream());
br = new BufferedReader(new InputStreamReader(socket.getInputStream())); // 向服务器端发送数据
pw.write("Hello Server!!! I am Client!!!\r\n");
pw.flush(); // 接收服务器端返回的数据
System.out.print("Info From Server:");
//此处仅读一行,若采用while()的方式,如果没有结束标记,会阻塞
System.out.println(br.readLine());
System.out.println("client over..."); } catch (UnknownHostException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
if (br != null) {
br.close();
}
if (pw != null) {
pw.close();
}
if (socket != null) {
socket.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
} }
3、注意事项:
防止方式阻塞导致程序卡死。Socket阻塞或者是流读取的阻塞。
三、Socket通信多线程版本:
实际使用时肯定是服务端接收到一个请求就开启一个线程来处理对应的请求。
四、其他思路扩展:
1、java.nio包提供了支持非阻塞通信的类,主要包括:
•ServerSocketChannel:ServerSocket的替代类,支持阻塞通信与非阻塞通信。
•SocketChannel:Socket的替代类,支持阻塞通信与非阻塞通信。
•Selector:为ServerSocketChannel监控接收连接就绪事件,为SocketChannel监控连接就绪、读就绪和写就绪事件。
•SelectionKey:代表ServerSocketChannel以及SocketChannel向Selector注册事件的句柄。当一个SelectionKey对象位于Selector对象的selected-keys集合中,就表示与这个SelectionKey对象相关的事件发生了。
ServerSocketChannel以及SocketChannel都是SelectableChannel的子类,如图3所示。SelectableChannel类以及其子类都能委托Selector来监控它们可能发生的一些事件,这种委托过程也称为注册事件过程。
待续......
Java Socket编程示例的更多相关文章
- 多线程Java Socket编程示例
package org.merit.test.socket; import java.io.BufferedReader; import java.io.IOException; import jav ...
- 多线程Java Socket编程示例(转)
这篇做为学习孙卫琴<<Java网络编程精解>>的学习笔记吧.其中采用Java 5的ExecutorService来进行线程池的方式实现多线程,模拟客户端多用户向同一服务器端发送 ...
- 如何为可扩展系统进行Java Socket编程
从简单I/O到异步非阻塞channel的Java Socket模型演变之旅 上世纪九十年代后期,我在一家在线视频游戏工资工作,在哪里我主要的工作就是编写Unix Unix Berkley Socket ...
- Java Socket编程题库
一. 填空题 ___ IP地址____用来标志网络中的一个通信实体的地址.通信实体可以是计算机,路由器等. 统一资源定位符URL是指向互联网"资源"的指针,由4部分组成:协议 ...
- Java Socket编程(转)
Java Socket编程 对于Java Socket编程而言,有两个概念,一个是ServerSocket,一个是Socket.服务端和客户端之间通过Socket建立连接,之后它们就可以进行通信了.首 ...
- Java基础:三步学会Java Socket编程
Java基础:三步学会Java Socket编程 http://tech.163.com 2006-04-10 09:17:18 来源: java-cn 网友评论11 条 论坛 第一步 ...
- 转:Java Socket编程
对于Java Socket编程而言,有两个概念,一个是ServerSocket,一个是Socket.服务端和客户端之间通过Socket建立连接,之后它们就可以进行通信了.首先ServerSocket将 ...
- Java Socket编程基础篇
原文地址:Java Socket编程----通信是这样炼成的 Java最初是作为网络编程语言出现的,其对网络提供了高度的支持,使得客户端和服务器的沟通变成了现实,而在网络编程中,使用最多的就是Sock ...
- Java Socket编程详细解说
Java Socket编程 JavaSocketServerSocket乱码超时 Java Socket编程 对于Java Socket编程而言,有两个概念,一个是ServerSocket,一个是So ...
随机推荐
- Configuration
package edu.fzu.ir.util; import java.io.File; import java.io.FileInputStream; import java.io.FileNot ...
- jQuery操作checkbox实例
示意图 <script type="text/javascript"> $(function () { $("#ddlNumber").change ...
- ThinkPHP在Ubuntu上 : mkdir的使用
问题: 环境:Ubuntu系统,xampp1.8.3-5建站工具 描述:以root的身份运行.Apache的 DocumentRoot = "/var/www" .thinkphp ...
- 【K8s】Kubernetes 最近正在看的资料
中国移动Kubernetes多集群统一管理实践: http://www.tuicool.com/articles/FrqQrqI#c-22517 一种新的进入容器的方式: WebSocket + D ...
- 【GoLang】GoLang 单元测试、性能测试使用方法
单元测试代码: ackage test import ( // "fmt" "testing" ) func Test_FlowControl(t *testi ...
- 错误描述:请求“System.Data.SqlClient.SqlClientPermission, System.Data, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089”类型的权限已失败
错误描述:请求“System.Data.SqlClient.SqlClientPermission, System.Data, Version=2.0.0.0, Culture=neutral, Pu ...
- ios 在ios9中 NSNotificationCenter addObserver 不会影响对象释放
如题,ios9上, [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(test) name:@&qu ...
- ios swfit 由继承UIButton了解类的构造方法
最近需要建立UIButton的子类. 先看一看swfit中继承父类构造方法的条件: Rule1 1“If your subclass doesn’t define any designated ini ...
- ACM/ICPC 之 并查集-食物链(POJ1182)
并查集的经典题型,POJ上题目还是中文= =,一般看到中文题都会感觉不太简单,这道题的数学归纳用得比较多,可以简化代码,挺有意思的. 同类型的题目还有POJ1703,比这个要简单,想了解并查集基本介绍 ...
- tp5中的一些小方法
// 当使用一个新页面替换当前页面的body后,body刷新了,所选择的select值就不能保存住,解决方法如下: 作业题目<select> <option>--请选择--&l ...