上一篇文章中介绍了C语言的
Socket编程,其主要目的是说明
Socket实现是基于网络层IP协议和传输层TCP协议或UDP协议的,网络层、传输层的协议又是操作系统来实现的,所以在C语言中不同操作系统对应着不同的函数库调用,而
Java语言具有平台无关性,也就是说不会因操作系统不同而依赖不同的类库,这篇文章将介绍基本的
Socket编程及
Java层面的实现
原理。
一、
Java语言
Socket编程
我们在日常上网时,会经常登录某个网址,发送我们的请求信息,然后从该网站得到我们想要的信息。这个是怎么实现的呢。其实,我们可以把我们自己当成客户端,网站当成服务端。其实这是个相对的概念,就是谁收到请求,谁就是服务端;谁发送请求,谁就是客户端。而发送和接收请求都是基于Socket 对象实现的。而这个过程是怎么样的呢?(这里介绍的是基于TCP/IP 的通信)
下面我先用一个简单的图解表示一下:
通过上面的图解,我们可以很清晰的看到整个通信的流程。
对于编码来实现的话,我们首先需要编写服务端,然后再编写客户端。
Socket原理
1、什么是Socket
在计算机通信领域,socket 被翻译为“套接字”,它是计算机之间进行通信的一种约定或一种方式。通过 socket 这种约定,一台计算机可以接收其他计算机的数据,也可以向其他计算机发送数据。
socket起源于Unix,而Unix/Linux基本哲学之一就是“一切皆文件”,都可以用“打开open –> 读写write/read –> 关闭cl
Java Socket编程—-通信是这样炼成的Java最初是作为网络编程语言出现的,其对网络提供了高度的支持,使得客户端和服务器的沟通变成了现实,而在网络编程中,使用最多的就是Socket。像大家熟悉的QQ、MSN都使用了Socket相关的技术。下面就让我们一起揭开Socket的神秘面纱。
Socket编程
一、网络基础知识(参考计算机网络)
关于计算机网络部分可以参考相
三,socket通信
1.http://blog.csdn.net/kongxx/article/details/7288896这个人写的关于socket通信不错,循序渐进式的讲解,用代码示例说明,运用流和socket进行远程通讯
2.最简单的socket是一个服务端对应一个客户端
server的写法
ServerSocket server = new ServerSoc
public class Server {
public static void main(String[] args) throws IOException {
Server
Socket server
Socket = null;
try {
server
Socket = new Server
Socket(8888);
} catch (IOException e) {
System.err.println("Could not listen on port: 8888.");
System.exit(1);
Socket client
Socket = null;
try {
System.out.println("Waiting for connection...");
client
Socket = server
Socket.accept();
System.out.println("Connection established with " + client
Socket.getInetAddress().getHostName());
} catch (IOException e) {
System.err.println("Accept failed.");
System.exit(1);
PrintWriter out = new PrintWriter(client
Socket.getOutputStream(), true);
BufferedReader in = new BufferedReader(new InputStreamReader(client
Socket.getInputStream()));
String inputLine;
while ((inputLine = in.readLine()) != null) {
System.out.println("Received message: " + inputLine);
out.println("Server received message: " + inputLine);
out.close();
in.close();
client
Socket.close();
server
Socket.close();
客户端代码:
```
java
import
java.net.*;
import
java.io.*;
public class Client {
public static void main(String[] args) throws IOException {
Socket socket = null;
PrintWriter out = null;
BufferedReader in = null;
try {
socket = new
Socket("localhost", 8888);
out = new PrintWriter(
socket.getOutputStream(), true);
in = new BufferedReader(new InputStreamReader(
socket.getInputStream()));
} catch (UnknownHostException e) {
System.err.println("Unknown host: localhost");
System.exit(1);
} catch (IOException e) {
System.err.println("Could not connect to localhost.");
System.exit(1);
BufferedReader stdIn = new BufferedReader(new InputStreamReader(System.in));
String userInput;
while ((userInput = stdIn.readLine()) != null) {
out.println(userInput);
System.out.println("Server response: " + in.readLine());
out.close();
in.close();
stdIn.close();
socket.close();
这个模板实现了一个简单的回显服务器,当客户端连接到服务器并发送消息时,服务器会将消息回显给客户端。