`
come_for_dream
  • 浏览: 120778 次
  • 性别: Icon_minigender_1
  • 来自: 长沙
社区版块
存档分类
最新评论

网络通信之Socket编程

 
阅读更多

                                网络通信之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的工作原理。

 

 

 

 

 

 

 

 

  • 大小: 43.2 KB
  • UISocket.zip (2.9 KB)
  • 描述: 一对一界面聊天
  • 下载次数: 3
  • 大小: 38.8 KB
  • project.zip (5.4 KB)
  • 描述: 多线程客户端程序
  • 下载次数: 1
分享到:
评论

相关推荐

    华中科技大学-计算机通信与网络(Socket编程)-内含源文件和说明书.zip

    它很可能包含了Socket编程的实例代码,比如服务器端和客户端的实现,展示了如何运用Socket API进行网络通信。读者可以通过阅读和运行这些代码来提升对Socket编程的实际操作能力。 总的来说,这个资源包为学习Socket...

    网络语音通信 socket编程实现

    Socket编程是实现这一功能的核心技术之一,尤其在实时通信场景下,它能够提供高效、低延迟的数据传输。本项目是一个本科课程设计,目的是让学生掌握网络语音通信的基础原理和编程实践,通过VC++编程语言实现两台在...

    网络编程1Socket编程

    Socket编程是实现网络通信的基础,是连接应用程序与网络协议的关键接口。在这个主题中,我们将深入探讨Socket编程的基本概念、工作原理以及如何在实际应用中使用它。 **Socket**,也称为套接字,是网络通信中的一个...

    网络socket 编程指南

    《网络Socket编程指南》是一本深入探讨网络通信技术的书籍,尤其关注于Socket编程这一核心领域。Socket,作为网络通信的基础接口,是实现进程间、机器间通信的关键工具。本书旨在帮助开发者理解和掌握如何利用Socket...

    Linux网络通信 socket应用编程知识点总结含例程

    Linux 网络通信 socket 应用编程知识点总结含例程 Linux 网络通信 socket 应用编程是指在 Linux 操作系统中使用 socket 编程来实现网络通信的技术。socket 是一种网络编程接口,提供了一个创建网络套接字的方法,...

    基于TCP/IP的socket编程

    "基于TCP/IP的socket编程"是一个深入探讨如何使用socket接口进行网络通信的主题。Socket编程允许应用程序通过网络发送和接收数据,它是互联网上不同计算机之间交互的核心机制。 在给定的描述中,我们看到一个创新的...

    Socket编程基于计算机网络通信

    Socket编程是计算机网络通信的核心技术之一,它提供了一种在不同设备之间建立连接并进行数据交换的方法。在本文中,我们将深入探讨Socket编程的基本概念、工作原理以及在C/S(客户端/服务器)架构中的应用。 首先,...

    网络socket编程集锦

    网络socket编程集锦,程序经过Linux平台PC上用 GNU 的gcc 成功编译过,适合新手学习借鉴。

    网络编程课件 Socket编程

    Socket编程是实现网络通信的基础,它提供了一组API(应用程序编程接口),使得程序员可以构建跨越网络的通信应用。本篇主要讨论Socket编程的核心概念,包括套接字的类型、数据封装以及相关的数据结构。 1. 套接字...

    windows 网络通信 socket编程详解 快速入门

    总的来说,Windows网络通信Socket编程涉及到了TCP/IP协议的理解、套接字的创建与管理,以及Win32 Socket API的使用。理解这些基本概念和API的使用方法是进行Socket编程的基础,也是开发高效网络应用程序的关键。通过...

    Java socket编程实现两台主机间的通信

    Java Socket 编程是 Java 语言中用于实现网络通信的编程技术。通过使用 Socket 编程,可以实现两台主机之间的通信,实现数据的传输和交换。本文将详细介绍 Java Socket 编程的原理、实现方法和应用场景。 一、Java ...

    应用SOCKET实现网络通信

    SOCKET编程是一种常见的网络通信方式,它允许两个程序间进行数据传输。SOCKET是实现网络通信的基石,是计算机网络通信中最核心的技术之一。SOCKET编程主要涉及客户端和服务器端,服务器端通过SOCKET监听来自客户端的...

    第21章Linux网络通信高级编程Socket.pdf

    【Linux网络通信高级编程Socket】章节主要探讨了在Linux环境下如何进行高级的网络通信编程,特别是使用Socket进行TCP/IP通信。Socket是网络编程的核心概念,它代表了一个通信端点,结合IP地址和端口号,用于标识网络...

    Socket 网络通信编程

    Socket网络通信编程是计算机网络中实现进程间通信的一种方式,特别是在局域网用户聊天和文件传输中广泛应用。本文将深入探讨Socket编程的概念、原理以及如何在多线程环境下实现聊天应用和文件发送。 首先,Socket...

    实验一_SOCKET编程实验

    本实验旨在帮助学生深入理解SOCKET编程的概念、原理及其实现过程,以便于掌握网络通信的核心技术。 **1. SOCKET编程基础** SOCKET是操作系统提供的接口,它为应用层提供了访问传输层服务的能力。在TCP/IP协议栈中...

    socket 编程 网络编程资料大全 给力

    网络通信协议,网络通信基础知识,socket网络编程的一些基础知识,Socket网络编程学习笔记,网络编程总结,2011-学习资料大全:java_socket编程,学习网络编程的十个步骤,socket编程入门(经典版),Unix_网络编程...

    通信Socket编程(最简单的Socket通信功能)

    "Socket 编程(最简单的 ...Socket 编程是实现网络通信的基础技术,本文详细介绍了 Socket 编程的基本流程和实现方法,包括服务器端和客户端的实现步骤。同时,我们也讨论了 Socket 编程的优点和缺点,以及其应用场景。

    Java Socket网络编程.pdf

    Socket编程主要用于实现客户端和服务器之间的通信,基于客户机/服务器模型。在这个模型中,服务器端通常处于被动等待状态,监听特定端口的连接请求,而客户端则主动发起连接。 在Java中,Socket编程主要涉及两个...

Global site tag (gtag.js) - Google Analytics