服务器端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语言)”这个主题中,我们将探讨如何用C语言构建一个...
在本场景中,我们关注的是如何通过Socket实现客户端(Client)与服务器(Server)之间的单向通信。以下是关于Socket编程实现通信的相关知识点: 1. **Socket基本概念**:Socket是操作系统提供的一种进程间通信(IPC...
用java实现socket通信,界面可视化,有服务端和客户端
在IT行业中,网络通信是不可或缺的一部分,而C#作为.NET框架下的主要编程语言,提供了强大的Socket类库来实现网络通信。本示例“C# socket简单的winform通信”旨在为初学者提供一个基础的Socket通信模型,特别是结合...
总的来说,“服务器到客户端的单向通信”是一个基础但重要的网络编程概念,广泛应用于各种实时信息推送服务。通过VS2010和C#,开发者可以构建出高效、可靠的系统,实现服务器对多个客户端的高效广播。这个项目中的...
TCP提供的是面向连接、可靠的双向通信,而UDP则是一种无连接、不可靠的单向通信方式。 在iOS应用中,我们可以使用CocoaAsyncSocket库或者CFStream API来实现Socket通信。CocoaAsyncSocket是一个强大的Objective-C库...
在Java中,Socket编程提供了丰富的API来实现客户端与服务器端的交互。本项目包含了一个简单的Socket程序,分为“单向通信”(oneway)和“双向通信”(twoway)两个部分,用于演示基本的Socket连接、数据发送和接收...
| 数据传输 | 双向通信,保证数据的顺序 | 单向通信,不保证数据的顺序 | | 安全性 | 高 | 低 | | 资源消耗 | 较高 | 较低 | | 速度 | 较慢 | 较快 | | 数据模式 | 数据流模式 | 数据报模式 | | 其他特点 | Server...
但是Java的标准Socket API并不直接支持这样的配置,通常需要通过编程逻辑来实现单向通信的限制。 **2. 半双工通信:** 半双工通信允许数据在两个方向上传输,但不能同时进行。在某一时刻,数据只能从一个方向流向另...
UDP Socket编程是利用UDP协议进行网络通信的一种方式,涉及客户端和服务端的交互。 **UDP Socket编程基础** UDP Socket编程的核心在于创建Socket,绑定端口,发送和接收数据报。在客户端,我们通常会创建一个Socket...
总之,"socket网络通信编程ppt教程"涵盖了网络通信的基础知识,包括IP地址、TCP/UDP协议、Socket编程、数据封装以及ISO/OSI七层模型,旨在帮助学习者掌握网络编程的核心技能。通过深入学习,开发者能够创建自己的...
总结起来,跨平台的Socket网络通信C语言实现是一个涉及网络协议、Socket编程和操作系统交互的复杂过程。通过对`sendto()`, `recvfrom()`, `gettimeofday()`等关键函数的理解和应用,开发者能够构建起可靠的网络通信...
UNIX Socket 编程是指在 UNIX 操作系统中使用 Socket 编程技术来实现网络通信的过程。Socket 编程是指在计算机网络中使用 Socket 来实现进程之间的通信,Socket 是一种特殊的文件描述符,用于标识一个网络连接。 ...
Java UDP(用户数据报协议)收发结构体实例与Socket编程是网络通信中的重要主题,尤其是在需要高效、无连接的数据传输场景下。UDP是一种无连接的传输层协议,相较于TCP,它提供了更低的延迟和更高的吞吐量,但不保证...
Java Socket编程是Java网络编程中的重要组成部分,它允许两台计算机通过网络进行通信。Socket在计算机网络中扮演着客户端和服务器的角色,使得应用程序能够发送和接收数据。本篇内容将深入探讨Java Socket编程的基础...
5. **多线程处理**: 由于Socket通信是单向的,即一次只能处理一个客户端的请求,如果有多名用户同时访问,服务器端需要使用多线程技术来处理并发连接。每个客户端连接都会创建一个新的线程,以确保服务的并行性,...
2. 单向通信模式:如何设计一个只允许数据从服务器到客户端流动的系统。 3. 用户界面设计:如何将复杂的网络通信功能以友好的方式呈现给用户。 4. HL7协议:理解和处理医疗信息交换的标准格式。 5. 客户端应用开发:...
在Linux系统中,Socket编程是实现网络通信的基础,它提供了进程间通信的一种方式,特别是对于跨网络的进程间通信。Linux Socket编程的核心概念是套接口(Socket),它扮演着通信端点的角色,允许两个进程通过网络...
Java网络编程的单向通信机制主要依赖于`Socket`类,它为客户端和服务器提供了双向的数据通道。然而,在单向通信中,我们仅使用其中一个方向。服务器使用`ServerSocket`监听连接,然后通过`Socket`的输入流接收数据。...