`

TCP Socket编程总结

    博客分类:
  • Java
阅读更多

TCP:是专门设计用于在不可靠的英特网上提供可靠的、端到端的字节流通信的协议,它是一个面向连接的协议,TCP连接是字节流而非报文流。

这里再简单说说UDPTCP的区别:

        TCP:可靠的连接传输,使用三方握手的方式完成通讯;

        UDP:不可靠的连接传输,传输的时候接受方不一定可以接受的到;

java中的所有网络程序的开发类都在java.net包中存在

    Socket:两个Java应用程序可通过一个双向的网络通信连接实现数据交换,这个双向链路的一端称为一个SocketSocket通常用来实现clientserver连接、java.net包中定义的两个SocketServerSocket,分别用来实现双向连接的clientserver端、建立连接时所需的寻址信息为远程计算机的IP地址和端口号(Port number)

    网络应用分为客户端和服务器端两部分,而Socket类是负责处理客户端通信的java类。通过这个类可以连接到指定IP或域名的服务器上,并且可以和服务器互相发送和接受数据。

    java中使用Scoket(即套接字)完成TCP程序的开发,即使用此类可以方便的建立可靠的,双向的,持续的,点对点的通讯连接。

    Scoket的程序开发中,服务器端使用ServerSocket等待客户端的连接,对于java的网络编程来说,每一个客户端都使用一个Scoket对象表示。

 

java的网络程序中,客户端只要符合来连接的通讯协议,那么服务器端都可以进行接受。

    首先我们需要了解一下TCP Socket编程的思路:首先是编写服务器端和客户端:

1、开发服务器端,通过ServerSocket server=new ServerSocket(8889); 构造ServerSocket使得服务器在8889端口上监听。

2、通过ServerSocketaccept方法得到连接,此时程序进入到阻塞状态

3、通过打印流向客户端输出系信息。

4、然后依次关闭服务器端的SocketServerSocket

5、开发客户端,通过Socket client=new Socket("localhost",8888) ;构造Socket实例。

6、最后通过一次性接受并关闭对应流和Socket

 

通过Demo发现TCP Socket编程只要考察的是Socket编程IO流和线程。

IO流:这里我们使用打印流和缓冲流;

线程:这里我们使用并且如果要想实现可以开启多个客户端的,则需要使用线程,让每开启一个客户端我们就启动一个线程。达到实现多个客户端通讯。

 

在利用TCP Socket实现通讯中只要记住“服务器端的输出就是客户端的输入,客户端的输出就是服务器端的输入”即可。

 

线程类:

package com.iflytek.socket;

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.PrintStream;
import java.net.Socket;

/**
 * @author xudongwang 2012-1-9
 * 
 *         Email:xdwangiflytek@gmail.com
 */
public class EchoThread implements Runnable {
	private Socket client = null;

	public EchoThread(Socket client) {
		this.client = client;
	}

	@Override
	public void run() {
		BufferedReader buf = null; // 接收输入流
		PrintStream out = null; // 打印流输出最方便
		try {
			out = new PrintStream(client.getOutputStream());
			// 准备接收客户端的输入信息
			buf = new BufferedReader(new InputStreamReader(
					client.getInputStream()));
			// 标志位,表示可以一直接收并回应信息
			boolean flag = true;
			while (flag) {
				// 接收客户端发送的内容
				String str = buf.readLine();
				if (str == null || "".equals(str)) { // 表示没有内容
					flag = false; // 退出循环
				} else {
					// 如果输入的内容为bye表示结束
					if ("bye".equals(str)) {
						flag = false;
					} else {
						out.println("ECHO : " + str); // 回应信息
					}
				}
			}
			client.close();
		} catch (Exception e) {
		}

	}

}

 

 服务器端:

package com.iflytek.socket;

import java.net.ServerSocket;
import java.net.Socket;

/**
 * @author xudongwang 2012-1-9
 * 
 *         Email:xdwangiflytek@gmail.com
 */
public class EchoThreadServer {
	public static void main(String args[]) throws Exception {
		ServerSocket server = null; // 定义ServerSocket类
		Socket client = null; // 表示客 户端
		server = new ServerSocket(8889); // 服务器在8888端口上监听
		boolean f = true; // 定义个标记位
		while (f) {
			System.out.println("服务器运行,等待客户端连接。");
			// 得到连接,程序进入到阻塞状态
			client = server.accept();
			// 每一个客户端表示一个线程
			new Thread(new EchoThread(client)).start();
		}
		server.close();
	}

}

 

 客户端:

package com.iflytek.socket;

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.PrintStream;
import java.net.Socket;

/**
 * @author xudongwang 2012-1-9
 * 
 *         Email:xdwangiflytek@gmail.com
 */
public class EchoClient {
	public static void main(String args[]) throws Exception {
		Socket client = null; // 表示客 户端
		client = new Socket("localhost", 8889);
		BufferedReader buf = null; // 一次性接收完成
		PrintStream out = null; // 发送数据
		BufferedReader input = null; // 接收键盘数据
		input = new BufferedReader(new InputStreamReader(System.in));
		buf = new BufferedReader(new InputStreamReader(client.getInputStream()));
		out = new PrintStream(client.getOutputStream());
		boolean flag = true; // 定义标志位
		while (flag) {
			System.out.print("输入信息:");
			String str = input.readLine(); // 接收键盘的输入信息
			out.println(str);
			if ("bye".equals(str)) {
				flag = false;
			} else {
				String echo = buf.readLine(); // 接收返回结果
				System.out.println(echo); // 输出回应信息
			}
		}
		buf.close();
		client.close();
	}

}
  • 大小: 12.8 KB
0
0
分享到:
评论

相关推荐

    VC学习笔记-基于TCP的socket编程

    ### 基于TCP的Socket编程在VC中的应用与实现 #### 一、知识点概览 在VC(Visual C++)环境下进行网络编程时,基于TCP的socket编程是实现客户端与服务器之间通信的重要方式之一。本文将从初始化、创建socket、绑定...

    基于TCP/IP的socket编程

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

    TCPSocket编程客户端和服务端

    压缩包文件"TCPSocket"可能包含了示例代码,这些代码可以帮助初学者更好地理解TCP Socket编程的实践。通过阅读和运行这些代码,你可以学习如何在Python、C++、Java等语言中实现TCP Socket客户端和服务端。 在编程...

    TCP socket编程

    本教程旨在帮助初学者理解TCP Socket编程的基本概念,并通过简单的实例演示如何实现客户端与服务器端的交互。 TCP(Transmission Control Protocol)是一种面向连接的、可靠的、基于字节流的传输层通信协议。它确保...

    基于TCP的Socket编程服务器和客户端代码

    总结起来,基于TCP的Socket编程是构建网络应用的基础,涉及网络连接的建立、数据的可靠传输和通信链路的维护。通过`File_client.java`和`File_server.java`这两个文件,我们可以学习到如何在Java中实现TCP服务器和...

    C# TCP Socket 编程

    总结,C#中的TCP Socket编程涉及到TcpListener和TcpClient类的使用,以及异步编程和异常处理。通过这些技术,可以构建可靠的网络通信系统,实现客户端和服务端的数据交换。在实际项目中,还需要考虑性能优化、错误...

    Java TCP IP Socket编程(原书第2版).

    《Java TCP/IP Socket编程(原书第2版)》基于TCP/IP Socket相关原理,对如何在Java中进行Socket编程作了深入浅出的介绍。《Java TCP/IP Socket编程(原书第2版)》内容简明扼要,条理清晰,并在讲解相应的概念或编程...

    linux下tcp简单的socket编程

    本教程主要面向Linux环境下的初学者,旨在介绍如何进行简单的TCP Socket编程,同时包含一个判断机器字节序(大端或小端)的代码。 首先,TCP是一种面向连接的、可靠的传输协议,它确保数据包按顺序无损地送达目标。...

    TCPSocket编程.zip

    TCPSocket编程是网络编程中的一个关键领域,它涉及到如何在不同计算机之间建立可靠的、基于TCP/IP协议的数据传输。在本文中,我们将深入探讨Socket的基本概念、在Windows和Linux环境下的实现、常用的Socket函数以及...

    Java TCP IP Socket编程(原书第2版)

    《Java TCP/IP Socket编程》(原书第2版)是一本深入探讨Java中Socket编程的专著,旨在帮助读者理解并掌握如何在Java环境中利用TCP/IP协议进行网络通信。本书不仅详细介绍了Socket的工作原理,还提供了丰富的示例...

    基于tcp的socket编程

    Socket编程是实现TCP通信的一种方式,它为应用程序提供了访问网络层服务的接口。本篇文章将深入探讨基于TCP的Socket编程,包括基本概念、服务器端和客户端的实现,以及常见问题。 首先,TCP套接字(Socket)是应用...

    基于TCP的Socket编程

    本文将深入探讨基于TCP的Socket编程,特别是以C++为编程语言的应用。适合对网络编程感兴趣的初学者,通过学习,你可以了解如何创建、连接和管理TCP套接字。 首先,TCP是一种面向连接的传输层协议,它提供了可靠的、...

    C# TCP Socket编程示例

    在IT行业中,网络通信是至关重要的,而C#语言提供了强大的网络编程能力,尤其是在TCP Socket编程方面。TCP(传输控制协议)是一种面向连接的、可靠的、基于字节流的传输层通信协议,常用于需要稳定数据传输的应用...

    总结java_socket编程.doc

    在Java中,Socket编程主要是基于TCP/IP协议的网络编程。 网络编程的两个主要问题 在网络编程中,有两个主要的问题需要解决:一是如何准确地定位网络上的一台或多台主机,二是找到主机后如何可靠高效地进行数据传输...

    Linux环境下基于TCP的Socket编程浅析

    ### Linux环境下基于TCP的Socket编程浅析 #### 摘要 本文主要探讨了Linux环境下基于TCP协议的Socket编程技术。Socket作为一种通用的进程间通信(IPC)方式,不仅适用于同一台计算机上的进程通信,也广泛应用于网络...

    socket编程实例 TCP通信编程

    Socket编程是计算机网络中的一种通信接口,主要用于实现进程间的网络通信。在TCP/IP协议栈中,Socket接口提供了标准的方法让应用程序能够发送和接收数据。本实例主要关注的是基于TCP协议的Socket通信编程,这是一种...

    基于TCP的SOCKET编程代码包

    本压缩包文件“基于TCP的SOCKET编程代码包”提供了多个关于TCP SOCKET编程的实例,适用于学习和开发网络通信应用。 首先,我们要理解SOCKET,它是网络编程中的基本接口,允许应用程序通过网络发送和接收数据。在...

    好用的Tcp Socket调试工具

    在IT行业中,网络编程是不可或缺的一部分,而TCP Socket通信作为网络通信的基础,其调试工作尤为重要。标题提到的“好用的Tcp Socket调试工具”显然是一款能够帮助开发者解决TCP Socket通信问题的有效辅助软件。描述...

    Java TCP IP Socket编程 包含源码

    Java TCP/IP Socket编程是网络通信领域中的核心技术,广泛应用于服务器端和客户端之间的数据传输。本资源包含第二版书籍的相关源码,旨在帮助开发者深入理解并实践Socket编程。以下是关于Java TCP/IP Socket编程的...

    c实现TCP的socket编程

    在IT行业中,网络编程是至关重要的领域,而TCP(传输控制协议)的Socket编程是其中的基础。本主题将深入探讨如何使用C语言实现TCP的Socket编程,包括客户端和服务端的构建。TCP是一种面向连接的、可靠的传输协议,而...

Global site tag (gtag.js) - Google Analytics