网络通信之Socket编程
最近又从新接触了网络编程的知识,记得在大一下学期就已经接触了点网络编程,但是当时刚刚开始学java内功和招式都非常浅薄。所以当时处于一种非常尴尬的处境,以至于但是只有搬出数据照抄源码的境地。所以时隔半载功力和招式已经不可同日而语,为了纪念当时因内力不足而被招式反噬的苦逼境地,写出自己对网络编程的感悟。
首先来了解什么是Socket。所谓socket通常也称作"套接字",应用程序通常通过"套接字"向网络发出请求或者应答网络请求。以J2SDK-1.3为例,Socket和ServerSocket类库位于java .net包中。ServerSocket用于服务器端,Socket是建立网络连接时使用的。在连接成功时,应用程序两端都会产生一个Socket实例,操作这个实例,完成所需的会话。对于一个网络连接来说,套接字是平等的,并没有差别,不因为在服务器端或在客户端而产生不同级别。不管是Socket还是ServerSocket它们的工作都是通过SocketImpl类及其子类完成的。
然后再看Socket客户端的创建
Socket(InetAddress remoteAddr, int remotePort) Socket(String remoteHost, int remotePort) Socket(InetAddress remoteAddr, int remotePort,InetAddress localAddr, int localPort) Socket(String remoteHost, int remotePort, InetAddress localAddr, in localPort) Socket()
前四个构造函数在创建了一个TCP套接字后,先连接到远程地址和端口号,再将其返回给程序。前两个没有指定本地的地址和端口号,将使用默认地址和可用的端口号。在有多个接口的主机上指定本地地址是有用的。指定地址的参数可以是字符串或InetAddress对象。最后一个没有创建连接,则在使用之前,必须显式的进行连接。
Socket: 操作
//使指定的终端打开一个TCP连接。SocketAdress是针对TCP/IP套接字的特殊型 void connect(SocketAddress destination) void connect(SocketAddress destination, int timeout) //取得输入流 InputStream getInputStream() //取得输出流 OutputStream getOutputStream() //关闭套接字,以及相关的输入输出 void close()
下面是一个建立客户端的代码示例:
public class ClientDemo { public static void main(String[] arges) { try { // 获取一个IP。null表示本机 InetAddress addr = InetAddress.getByName(null); // 打开8888端口,与服务器建立连接 Socket sk = new Socket(addr, 8888); /* * 上面这句也可以用 Socket sk = new Socket ("127.0.0.1", 8888); 代替 */ // 缓存输入 BufferedReader in = new BufferedReader(new InputStreamReader(sk .getInputStream())); // 缓存输出 PrintWriter out = new PrintWriter(new BufferedWriter( new OutputStreamWriter(sk.getOutputStream())), true); // 向服务器发送信息 out.println("你好!"); // 接收服务器信息 System.out.println(in.readLine()); //关闭套接字 sk.close(); } catch (Exception e) { e.printStackTrace(); } } }
TCP服务端
服务器端的工作时间里一个通信 终端,并被动的等待客户端的连接。一般的一个服务器端的创建有以下两步工作:
1.创建一个ServerSocket实例并指定本地端口号
2.重复执行:
a.调用ServerSocket的accept()方法来监听下一个客户端的连接。并会返回一个Socket连接对象
b.用返回得到的Socket对象得到InputStream和OutputSream对象来进行与客户端的通信。
c. 通信完成后,使用Socket类的close()方法关闭该客户端套接字连接。
看服务段代码:
/** * 这个服务器端非常简单,只连接一个客户端 * 并只接受一次客户端的消息,并向客户端发送一条消息 */ public class SampleServer{ public static void main(String[] arges){ try{ int port = 8888; //使用8888端口创建一个ServerSocket ServerSocket mySocket = new ServerSocket(port); //等待监听是否有客户端连接 while(true){ Socket sk = mySocket.accept(); //输入缓存 BufferedReader in = new BufferedReader ( new InputStreamReader (sk.getInputStream ())); //输出缓存 PrintWriter out = new PrintWriter ( new BufferedWriter( new OutputStreamWriter( sk.getOutputStream ())), true); //打印接收到的客户端发送过来的信息 System.out.println("客户端信息:"+in.readLine ()); //向客户端回信息 out.println("你好,我是服务器。我使用的端口号: "+port); } }catch(Exception e){ System.out.println(e); } } }
下面的程序是实现的界面板的一对一的聊天程序。
实现代码在附件中。
接着实现的例子是使用多线程,多客户端聊天的程序
实现代码见附件
通过上面的例子,我们大概知道了服务器和客户端之间的通信关系,但是这些只是浅层次表面上的知识,更深层的还要了解TCP/IP的工作原理。
相关推荐
它很可能包含了Socket编程的实例代码,比如服务器端和客户端的实现,展示了如何运用Socket API进行网络通信。读者可以通过阅读和运行这些代码来提升对Socket编程的实际操作能力。 总的来说,这个资源包为学习Socket...
Socket编程是实现这一功能的核心技术之一,尤其在实时通信场景下,它能够提供高效、低延迟的数据传输。本项目是一个本科课程设计,目的是让学生掌握网络语音通信的基础原理和编程实践,通过VC++编程语言实现两台在...
Socket编程是实现网络通信的基础,是连接应用程序与网络协议的关键接口。在这个主题中,我们将深入探讨Socket编程的基本概念、工作原理以及如何在实际应用中使用它。 **Socket**,也称为套接字,是网络通信中的一个...
《网络Socket编程指南》是一本深入探讨网络通信技术的书籍,尤其关注于Socket编程这一核心领域。Socket,作为网络通信的基础接口,是实现进程间、机器间通信的关键工具。本书旨在帮助开发者理解和掌握如何利用Socket...
Linux 网络通信 socket 应用编程知识点总结含例程 Linux 网络通信 socket 应用编程是指在 Linux 操作系统中使用 socket 编程来实现网络通信的技术。socket 是一种网络编程接口,提供了一个创建网络套接字的方法,...
"基于TCP/IP的socket编程"是一个深入探讨如何使用socket接口进行网络通信的主题。Socket编程允许应用程序通过网络发送和接收数据,它是互联网上不同计算机之间交互的核心机制。 在给定的描述中,我们看到一个创新的...
Socket编程是计算机网络通信的核心技术之一,它提供了一种在不同设备之间建立连接并进行数据交换的方法。在本文中,我们将深入探讨Socket编程的基本概念、工作原理以及在C/S(客户端/服务器)架构中的应用。 首先,...
网络socket编程集锦,程序经过Linux平台PC上用 GNU 的gcc 成功编译过,适合新手学习借鉴。
Socket编程是实现网络通信的基础,它提供了一组API(应用程序编程接口),使得程序员可以构建跨越网络的通信应用。本篇主要讨论Socket编程的核心概念,包括套接字的类型、数据封装以及相关的数据结构。 1. 套接字...
总的来说,Windows网络通信Socket编程涉及到了TCP/IP协议的理解、套接字的创建与管理,以及Win32 Socket API的使用。理解这些基本概念和API的使用方法是进行Socket编程的基础,也是开发高效网络应用程序的关键。通过...
Java Socket 编程是 Java 语言中用于实现网络通信的编程技术。通过使用 Socket 编程,可以实现两台主机之间的通信,实现数据的传输和交换。本文将详细介绍 Java Socket 编程的原理、实现方法和应用场景。 一、Java ...
SOCKET编程是一种常见的网络通信方式,它允许两个程序间进行数据传输。SOCKET是实现网络通信的基石,是计算机网络通信中最核心的技术之一。SOCKET编程主要涉及客户端和服务器端,服务器端通过SOCKET监听来自客户端的...
【Linux网络通信高级编程Socket】章节主要探讨了在Linux环境下如何进行高级的网络通信编程,特别是使用Socket进行TCP/IP通信。Socket是网络编程的核心概念,它代表了一个通信端点,结合IP地址和端口号,用于标识网络...
Socket网络通信编程是计算机网络中实现进程间通信的一种方式,特别是在局域网用户聊天和文件传输中广泛应用。本文将深入探讨Socket编程的概念、原理以及如何在多线程环境下实现聊天应用和文件发送。 首先,Socket...
本实验旨在帮助学生深入理解SOCKET编程的概念、原理及其实现过程,以便于掌握网络通信的核心技术。 **1. SOCKET编程基础** SOCKET是操作系统提供的接口,它为应用层提供了访问传输层服务的能力。在TCP/IP协议栈中...
网络通信协议,网络通信基础知识,socket网络编程的一些基础知识,Socket网络编程学习笔记,网络编程总结,2011-学习资料大全:java_socket编程,学习网络编程的十个步骤,socket编程入门(经典版),Unix_网络编程...
"Socket 编程(最简单的 ...Socket 编程是实现网络通信的基础技术,本文详细介绍了 Socket 编程的基本流程和实现方法,包括服务器端和客户端的实现步骤。同时,我们也讨论了 Socket 编程的优点和缺点,以及其应用场景。
Socket编程主要用于实现客户端和服务器之间的通信,基于客户机/服务器模型。在这个模型中,服务器端通常处于被动等待状态,监听特定端口的连接请求,而客户端则主动发起连接。 在Java中,Socket编程主要涉及两个...