`
kang
  • 浏览: 472763 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

Socket编程初步(单向通信)

阅读更多

服务器端TCPServer .java

package  com.javaeye.kang.socket;

 

import java.net.ServerSocket;

import java.net.Socket;

 

//Socket 服 务 器端

public class TCPServer {

 

      public static void main(String[] args) throws Exception {

            // 创 建一个 Socket 服 务 器端, 带 有端口号(能 让 客 户 端能具体 连过 来)

            ServerSocket ss = new ServerSocket(6666);

            //Server 端 傻 等

            Socket s = ss.accept();

            System. out .println( "a client accept!" );

      }

} 
 

 

客户端TCPClient .java

package  com.javaeye.kang.socket;

 

import java.net.Socket;

 

//Socket 客 户 端

public class TCPClient {

 

      public static void main(String[] args) throws Exception {

            // 创 建一个客 户 端,指定服 务 器端的 IP 地址和端口号,即具体 连 接 “ 对 象 ”

            Socket s = new Socket( "127.0.0.1" ,6666);

      }

} 
 

 

弊端:Server提供一次服务后,就结束了

 

 

改进: TCPServer .java 持续服务(使用 While 死循环)

package  com.javaeye.kang.socket;

 

import java.net.ServerSocket;

import java.net.Socket;

 

//Socket 服 务 器端

public class TCPServer {

 

      public static void main(String[] args) throws Exception {

            // 创 建一个 Socket 服 务 器端, 带 有端口号(能 让 客 户 端能具体 连过 来)

            ServerSocket ss = new ServerSocket(6666);

            //Server 端 傻 等 ,死循环

            while(true) {

                  Socket s = ss.accept();

                  System.out.println("a client accept!");

            }

      }

} 
 

客户端连上服务器端后,向服务器端发消息。

 

TCPServer .java

package  com.javaeye.kang.socket;

 

import java.io.DataInputStream;

import java.net.ServerSocket;

import java.net.Socket;

 

//Socket 服 务 器端

public class TCPServer {

 

      public static void main(String[] args) throws Exception {

            // 创 建一个 Socket 服 务 器端, 带 有端口号(能 让 客 户 端能具体 连过 来)

            ServerSocket ss = new ServerSocket(6666);

            //Server 端 傻 等,死循 环

            while ( true ) {

                  // 阻塞式 傻 等

                  Socket s = ss.accept();

                  // 服 务 器端接收数据,作 为输 入流

      DataInputStream dis = new DataInputStream(s.getInputStream());

                  // 读 出 输 入流中的数据, readUTF 也是阻塞式 傻 等

                  System. out .println(dis.readUTF());

                  // 关闭 管道

                  dis.close();

            }

      }

}
 

 

TCPClient .java

 

package  com.javaeye.kang.socket;

 

import java.io.DataOutputStream;

import java.io.OutputStream;

import java.net.Socket;

 

//Socket 客 户 端

public class TCPClient {

 

      public static void main(String[] args) throws Exception {

            // 创 建一个客 户 端,指定服 务 器端的 IP 地址和端口号,即具体 连 接 “ 对 象 ”

            Socket s = new Socket( "127.0.0.1" ,6666);

            // 客 户 端 说话 ,作 为输 出流

            OutputStream os = s.getOutputStream();

            // 套管道

            DataOutputStream dos = new DataOutputStream(os);

            // 客 户 端 说话

            dos.writeUTF( "Hello Server!" );

            dos.flush();

            // 最后 关闭

            dos.close();

            os.close();

      }

} 
 

 

先启动那个服务器端,见图 2

 

再运行客户端,运行一次,往服务器端写一句话。见图 3

 

 

 

这个程序的问题:如果有一个客户端连上来的时候,进入 while ,但是并没有立即利用服务(向服务器端写数据),此时就导致别的客户端就连不上来了。这样的 TCP Server 是有问题的。以前一直是同步 IO ,这个在处理 TCP Server 是有问题的( C C++ TCP Server 端比较棒!)。不过,现在 Java 已经开始提供异步 IO 了。

 

 

 

说明:必须先起 Server 服务,再起 Client ,否则肯定会报连接错误。见图 1

 -》这个报错信息也很自然,你服务器端的Server服务还没启动,你让人家Client连接谁呀?(20090507追加)

 

  • 描述: 先启动Client报错
  • 大小: 21.1 KB
  • 描述: 先启动Server,服务器端傻等
  • 大小: 26.6 KB
  • 描述: 再运行Client,向服务器端写数据(每运行一次,写一次数据)
  • 大小: 25.8 KB
分享到:
评论

相关推荐

    socket服务端客户端单向通信(C语言)

    Socket编程是计算机网络编程中的重要组成部分,特别是在C语言环境下,它提供了一种高效且灵活的方式来实现进程间的网络通信。在“socket服务端客户端单向通信(C语言)”这个主题中,我们将探讨如何用C语言构建一个...

    socket编程实现通信

    在本场景中,我们关注的是如何通过Socket实现客户端(Client)与服务器(Server)之间的单向通信。以下是关于Socket编程实现通信的相关知识点: 1. **Socket基本概念**:Socket是操作系统提供的一种进程间通信(IPC...

    socket通信java编程

    用java实现socket通信,界面可视化,有服务端和客户端

    C# socket简单的winform通信

    在IT行业中,网络通信是不可或缺的一部分,而C#作为.NET框架下的主要编程语言,提供了强大的Socket类库来实现网络通信。本示例“C# socket简单的winform通信”旨在为初学者提供一个基础的Socket通信模型,特别是结合...

    服务器到客户端的单向通信

    总的来说,“服务器到客户端的单向通信”是一个基础但重要的网络编程概念,广泛应用于各种实时信息推送服务。通过VS2010和C#,开发者可以构建出高效、可靠的系统,实现服务器对多个客户端的高效广播。这个项目中的...

    iOS网络编程SocketDemo

    TCP提供的是面向连接、可靠的双向通信,而UDP则是一种无连接、不可靠的单向通信方式。 在iOS应用中,我们可以使用CocoaAsyncSocket库或者CFStream API来实现Socket通信。CocoaAsyncSocket是一个强大的Objective-C库...

    Socket 网络编程

    在Java中,Socket编程提供了丰富的API来实现客户端与服务器端的交互。本项目包含了一个简单的Socket程序,分为“单向通信”(oneway)和“双向通信”(twoway)两个部分,用于演示基本的Socket连接、数据发送和接收...

    C#的Socket编程文档

    | 数据传输 | 双向通信,保证数据的顺序 | 单向通信,不保证数据的顺序 | | 安全性 | 高 | 低 | | 资源消耗 | 较高 | 较低 | | 速度 | 较慢 | 较快 | | 数据模式 | 数据流模式 | 数据报模式 | | 其他特点 | Server...

    JAVA Socket通信示例

    但是Java的标准Socket API并不直接支持这样的配置,通常需要通过编程逻辑来实现单向通信的限制。 **2. 半双工通信:** 半双工通信允许数据在两个方向上传输,但不能同时进行。在某一时刻,数据只能从一个方向流向另...

    UDPSocket编程客户端和服务端

    UDP Socket编程是利用UDP协议进行网络通信的一种方式,涉及客户端和服务端的交互。 **UDP Socket编程基础** UDP Socket编程的核心在于创建Socket,绑定端口,发送和接收数据报。在客户端,我们通常会创建一个Socket...

    socket网络通信编程ppt教程

    总之,"socket网络通信编程ppt教程"涵盖了网络通信的基础知识,包括IP地址、TCP/UDP协议、Socket编程、数据封装以及ISO/OSI七层模型,旨在帮助学习者掌握网络编程的核心技能。通过深入学习,开发者能够创建自己的...

    跨平台socket网络通信c语言实现

    总结起来,跨平台的Socket网络通信C语言实现是一个涉及网络协议、Socket编程和操作系统交互的复杂过程。通过对`sendto()`, `recvfrom()`, `gettimeofday()`等关键函数的理解和应用,开发者能够构建起可靠的网络通信...

    UNIX_Socket编程.ppt

    UNIX Socket 编程是指在 UNIX 操作系统中使用 Socket 编程技术来实现网络通信的过程。Socket 编程是指在计算机网络中使用 Socket 来实现进程之间的通信,Socket 是一种特殊的文件描述符,用于标识一个网络连接。 ...

    java Udp 收发结构体实例 Socket编程

    Java UDP(用户数据报协议)收发结构体实例与Socket编程是网络通信中的重要主题,尤其是在需要高效、无连接的数据传输场景下。UDP是一种无连接的传输层协议,相较于TCP,它提供了更低的延迟和更高的吞吐量,但不保证...

    Java Socket 编程

    Java Socket编程是Java网络编程中的重要组成部分,它允许两台计算机通过网络进行通信。Socket在计算机网络中扮演着客户端和服务器的角色,使得应用程序能够发送和接收数据。本篇内容将深入探讨Java Socket编程的基础...

    基于socket连接,学生信息查询系统

    5. **多线程处理**: 由于Socket通信是单向的,即一次只能处理一个客户端的请求,如果有多名用户同时访问,服务器端需要使用多线程技术来处理并发连接。每个客户端连接都会创建一个新的线程,以确保服务的并行性,...

    界面版本 单向套字节 socket

    2. 单向通信模式:如何设计一个只允许数据从服务器到客户端流动的系统。 3. 用户界面设计:如何将复杂的网络通信功能以友好的方式呈现给用户。 4. HL7协议:理解和处理医疗信息交换的标准格式。 5. 客户端应用开发:...

    Linux Socket编程

    在Linux系统中,Socket编程是实现网络通信的基础,它提供了进程间通信的一种方式,特别是对于跨网络的进程间通信。Linux Socket编程的核心概念是套接口(Socket),它扮演着通信端点的角色,允许两个进程通过网络...

    Java网络编程基础篇之单向通信 <font color=red>原创</font>

    Java网络编程的单向通信机制主要依赖于`Socket`类,它为客户端和服务器提供了双向的数据通道。然而,在单向通信中,我们仅使用其中一个方向。服务器使用`ServerSocket`监听连接,然后通过`Socket`的输入流接收数据。...

Global site tag (gtag.js) - Google Analytics