1、什么是socket?
所谓socket通常也称作“套接字”,用于描述IP地址和端口,是一个通信链的句柄。应用程序通常通过套接字想网络发送请求或者应该网络请求。
Socket通讯
网络上的两个程序通过一个双向的通讯连接实现数据的交换,这个双向链路的一端称为一个
Socket
。
Socket
通常用来实现客户方和服务方的连接。
Socket
是
TCP/IP
协议的一个十分流行的编程界面,一个
Socket
由一个
IP
地址和一个端口号唯一确定。
在传统的
UNIX
环境下可以操作
TCP/IP
协议的接口不止
Socket
一个,
Socket
所支持的协议种类也不光
TCP/IP
一种,因此两者之间是没有必然联系的。在
Java
环境下,
Socket
编程主要是指基于
TCP/IP
协议的网络编程。
Socket通讯的一般过程
使用
Socket
进行
Client/Server
程序设计的一般连接过程是这样的:
Server
端
Listen(
监听
)
某个端口是否有连接请求,
Client
端向
Server
端发出
Connect(
连接
)
请求,
Server
端向
Client
端发回
Accept
(接受)消息。一个连接就建立起来了。
Server
端和
Client
端都可以通过
Send
,
Write
等方法与对方通信。
对于一个功能齐全的
Socket
,都要包含以下基本结构,其工作过程包含以下四个基本的步骤:
(
1
)
创建
Socket
;
(
2
)
打开连接到
Socket
的输入
/
出流;
(
3
)
按照一定的协议对
Socket
进行读
/
写操作;
(
4
)
关闭
Socket.
创建Socket
java
在包
java.net
中提供了两个类
Socket
和
ServerSocket
,分别用来表示双向连接的客户端和服务端
。这是两个封装得非常好的类
package com.yt.manager.net.socket.thread;
import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.ArrayList;
/**
* @Description: 服务端
* @ClassName: MyServer
* @Project: base-info
* @Author: zxf
* @Date: 2011-7-11
*/
public class MyServer {
// 定义保存所有socket的ArrayList
public static ArrayList<Socket> socketList = new ArrayList<Socket>();
public static void main(String[] args) throws IOException {
ServerSocket ss = new ServerSocket(30000);
// 循环接受客户端的请求
while (true) {
// 此行代码将阻塞,将一直等待客户端的请求
Socket socket = ss.accept();
socketList.add(socket);
// 每接受一个客户端的请求,则打开一个线程
new Thread(new ServerThread(socket)).start();
}
}
}
package com.yt.manager.net.socket.thread;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintStream;
import java.net.Socket;
/**
* @Description: 服务端线程处理类
* @ClassName: ServerThread
* @Project: base-info
* @Author: zxf
* @Date: 2011-7-11
*/
public class ServerThread implements Runnable {
// 定义当前线程所树立的Socket
Socket s = null;
// 该线程所处理的Socket对应的输入流
BufferedReader br = null;
public ServerThread(Socket s) throws IOException {
this.s = s;
// 初始化该Socket所对应的输入流
br = new BufferedReader(new InputStreamReader(s.getInputStream()));
}
@Override
public void run() {
try {
String content = null;
while ((content = this.readFromClient()) != null) {
for (Socket s : MyServer.socketList) {
PrintStream print = new PrintStream(s.getOutputStream());
print.println(content);
}
}
} catch (Exception e) {
// TODO: handle exception
}
}
//定义读取客户端数据的方法
public String readFromClient() {
try {
return br.readLine();
} catch (IOException e) {
//如果捕捉到异常,说明该Socket对应的客户端已关闭,删除该Socket
MyServer.socketList.remove(s);
}
return null;
}
}
package com.yt.manager.net.socket.thread;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintStream;
import java.net.Socket;
import java.net.UnknownHostException;
/**
* @Description: 客户端
* @ClassName: MyClient
* @Project: base-info
* @Author: zxf
* @Date: 2011-7-11
*/
public class MyClient {
public static void main(String[] args) throws UnknownHostException,
IOException {
Socket s = new Socket("127.0.0.1", 30000);
// 客户端启动ClientThread线程来不断接受来自服务器的请求的数据
new Thread(new ClientThread(s)).start();
// 获取该Socket对应的输出流
PrintStream p = new PrintStream(s.getOutputStream());
//p.println("三");
String content = null;
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
while ((content = br.readLine()) != null) {
// 将用户的键盘输入内容写入Socket对应的输出流
p.println(content);
}
}
}
package com.yt.manager.net.socket.thread;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.Socket;
/**
* @Description: 客户端线程处理类
* @ClassName: ClientThread
* @Project: base-info
* @Author: zxf
* @Date: 2011-7-11
*/
public class ClientThread implements Runnable {
// 该线程负责处理的Socket
Socket s = null;
// 该线程所处理的Socket所对应的输入流
BufferedReader br = null;
public ClientThread(Socket s) throws IOException {
this.s = s;
br = new BufferedReader(new InputStreamReader(s.getInputStream()));
}
@Override
public void run() {
try {
String content = null;
// 不间断读取Socket输入流中的内容,并打印
while ((content = br.readLine()) != null) {
System.out.println(content);
}
} catch (Exception e) {
// TODO: handle exception
}
}
}
分享到:
相关推荐
Java网络编程是开发分布式应用程序的关键技术,特别是在当前互联网时代,其重要性不言而喻。本文将深入探讨Java网络编程的基础知识,重点关注TCP和UDP两种主要的网络协议及其在Java中的实现。 首先,网络编程的核心...
Java Socket编程是Java网络编程的核心部分,它为应用程序提供了低级别的、基于TCP/IP协议的网络通信能力。这篇论文深入探讨了如何使用Java进行Socket编程,简化了以往网络编程中的复杂性和易错性。 1、综论网络...
针对不同层次的网络通信,Java提供的网络功能有4大类:URL、InetAddress、Socket、Datagram。以基于Socket的Java网络编程为例,来探讨Java网络编程,具有一定的参考价值。
◇8.3 基于Socket的低层次Java网络编程 ◇本讲小结 ◇课后习题 ★ 第九讲 JavaBean和RMI ◇课前索引 ◇9.1 JavaBean的基本概念 ◇9.2 JavaBean开发简介 ◇9.3 RMI的基本概念和编程简介 ◇9.4 EJB简介 ◇本...
Java网络编程中的TCP(Transmission Control Protocol)是一种面向连接的、可靠的、基于字节流的传输层通信协议。在Java中,我们通常使用Socket类来实现TCP网络编程。Socket是Java.IO包的一部分,提供了网络通信的...
总的来说,网络编程PPT详细介绍了网络的基本概念、网络协议、OSI和TCP/IP模型,以及Java中进行网络编程的API,特别是Socket和ServerSocket的使用。通过学习这些知识,开发者能够创建出能够跨越网络进行通信的应用...
Java_Socket网络编程是Java平台中用于实现网络通信的核心组件,它基于TCP/IP协议栈,提供了客户端和服务器端之间的双向通信。以下是对标题和描述中所涉及知识点的详细解释: 1. **简单服务器端** - `ServerSocket`...
总的来说,Java网络编程涉及到了计算机网络的多个层次,理解OSI模型和TCP/IP协议族是构建网络应用程序的关键。通过学习和实践,开发者可以创建各种网络应用,实现数据的实时传输、文件共享、远程访问等功能。
【基于Socket的低层次Java网络编程】 Socket是网络通信的基本接口,它允许程序在两台计算机之间建立通信链路。在Java中,Socket类和ServerSocket类用于实现基于TCP的通信。低层次的Socket编程需要处理更细节的网络...
Java网络编程是Java技术的重要组成部分,它允许程序与网络中的其他设备进行通信。在Java中,网络编程主要依赖于`java.net`包提供的类和接口。以下是对标题和描述中涉及知识点的详细说明: 1. **概述** - **...
◇8.3 基于Socket的低层次Java网络编程 ◇本讲小结 ◇课后习题 ★ 第九讲 JavaBean和RMI ◇课前索引 ◇9.1 JavaBean的基本概念 ◇9.2 JavaBean开发简介 ◇9.3 RMI的基本概念和编程简介 ◇9.4 EJB简介 ◇本...
◇8.3 基于Socket的低层次Java网络编程 ◇本讲小结 ◇课后习题 ★ 第九讲 JavaBean和RMI ◇课前索引 ◇9.1 JavaBean的基本概念 ◇9.2 JavaBean开发简介 ◇9.3 RMI的基本概念和编程简介 ◇9.4 EJB简介 ◇本...
◇8.3 基于Socket的低层次Java网络编程 ◇本讲小结 ◇课后习题 ★ 第九讲 JavaBean和RMI ◇课前索引 ◇9.1 JavaBean的基本概念 ◇9.2 JavaBean开发简介 ◇9.3 RMI的基本概念和编程简介 ◇9.4 EJB简介 ◇本...
Java网络编程技术主要涉及TCP/IP模型的多个层次,特别是应用层和传输层。在这些练习题中,我们可以通过分析问题来复习相关知识点。 1. Java网络程序通常位于TCP/IP参考模型的应用层,因为它处理的是应用程序如何...
在 Java 中,Socket 是一种基于 TCP/IP 协议的网络编程接口。通过使用 Socket,可以实现文件传输、远程登录、电子邮件等网络应用程序。 知识点二:TCP/IP 协议 TCP/IP 协议是一种常用的网络协议,允许不同的设备在...
毕业设计计划是指学生完成毕业设计的整个过程的计划,包括调研企业信息化市场现状、学习Java编程基本原理及程序开发流程、建立业务模型、设计系统框架、开发相应代码、对相应代码进行测试修等几个方面的计划。...
"基于JAVA的网络游鱼多媒体展示系统设计" 本文主要介绍了基于JAVA的网络游鱼多媒体展示系统的设计和实现。该系统的主要特点是信息处理量大,各个环节要求连接性能强。系统实现尽量简化代码结构,抽象出公用模块,以...
Java 面试题整理 下面是对给定文件的详细知识点总结: 1. J2EE 是什么? 答:J2EE 是 Sun 公司提出的多层、...Java 面试题涵盖了 Java 语言的多个方面,包括 Java 基础、JavaEE、设计模式、多线程、网络编程等。