`

TCP程序设计(单线程服务器和多线程服务器学习)

    博客分类:
  • J2EE
阅读更多

/********下面是单线程服务器的服务器端*********/

package serverSocket;

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

/***
* TCP程序设计:
* java中使用套接字完成TCP程序的开发,特点:可靠、双向、持续、点对点
* 对java的网络程序来说,每一个客户端都是一个socket对象;
* serverSocket编程服务器端:
* 注意:该为单线程服务器,即一个客户连接进入之后,其他客户只能在等待,连接不进去的.
* 注意:该种服务器设置,不适合聊天软件的开发,因为必须等待连接进入,会占用大量资源.
* @author Administrator
*
*/
public class EchoServer {
public static void main(String[] args) throws Exception{
ServerSocket server = null;
Socket client = null;
PrintStream out = null;
BufferedReader buf = null;
server = new ServerSocket(8888);
while(true){
System.out.println("服务器运行,等待客户连接中......");
client = server.accept();//排队等待客户端接入
buf = new BufferedReader(
new InputStreamReader(client.getInputStream()));
out = new PrintStream(client.getOutputStream());

boolean flag = true;
while(flag){
String str = buf.readLine();
if(str == null || "".equals(str)){
flag = false;
}else{
if("bye".equals(str)){
flag = false;
}else{
out.println("ECHO: " + str);
}
}
}
buf.close();
out.close();
client.close();
}
}
}


/********下面是单线程服务器的客户端*********/

package serverSocket;

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.PrintStream;
import java.net.Socket;
/***
* socket通信客户端:
* 关键:
* 1、input:控制台输入流,
* 2、out:向服务器输出流,
* 3、buf:读取返回信息流
* @author Administrator
*
*/
public class EchoClient {
public static void main(String[] args) throws Exception{
Socket client = null;
client = new Socket("localhost",8888);//连接编程,
BufferedReader buf = null;
PrintStream out = null;
BufferedReader input = null;

input = new BufferedReader(//输入流:接受从控制台输入的信息,
new InputStreamReader(System.in));
out = new PrintStream(client.getOutputStream());//输出流:打开向服务器输出的流
buf = new BufferedReader(//输入流:接受从服务器返回的信息,
new InputStreamReader(client.getInputStream()));

boolean flag = true;
while(flag){
System.out.println("输入信息: ");
String line = input.readLine();
out.println(line);
if("bye".equals(line)){
flag = false;
}else{
String echo = buf.readLine();//获取服务器返回信息,
System.out.println(echo);
}
}
client.close();
buf.close();
out.close();
input.close();
}
}


/********下面是多线程服务器测试*********/

package serverSocket;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintStream;
import java.net.ServerSocket;
import java.net.Socket;
/***
* 多线程服务器:
* 原理:每当接入一客户,就另起一线程,将回复信息的任务交给了线程处理,
* 注意:该种服务器设置,不适合聊天软件的开发,因为必须等待连接进入,会占用大量资源.
* @author Administrator
*
*/
public class EchoThreadServer {
public static void main(String[] args)throws Exception {
ServerSocket server = null;
Socket client = null;
server = new ServerSocket(8888);
boolean flag = true;
while(flag){
System.out.println("服务器正在运行,等待客户连接......");
client = server.accept();
new Thread(new EchoThread(client)).start();
//server.close();
}
}
}
/***
* 每一客户接入,都新创建一线程,打开输入流,输出流,处理信息
* @author Administrator
*
*/
class EchoThread implements Runnable{
private Socket client = null;
public EchoThread(Socket client) {
this.client = client;
}
@Override
public void run(){
PrintStream out = null;
BufferedReader buf = null;

try {
out = new PrintStream(client.getOutputStream());//打开输出流
buf = new BufferedReader(new InputStreamReader(client.getInputStream()));//打开输入流

boolean flag = true;
while(flag){
String line = buf.readLine();
if(line == null || "".equals(line)){
flag = false;
}else{
if("bye".equals(line)){
flag = false;
}else{
out.println("Echo: " + line);
}
}
}
} catch (Exception e) {
e.printStackTrace();
} finally{
try {
out.close();
buf.close();
client.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
*******************************************************经测试通过,只为交流学习************************

分享到:
评论
1 楼 beyond0851 2013-01-27  
[b][/b]

相关推荐

    Qt多线程TCP服务器

    **Qt多线程TCP服务器详解** ...总的来说,Qt多线程TCP服务器利用了C++的多线程机制和Qt的网络功能,实现了高效、可靠的网络通信。通过合理设计和优化,这样的服务器可以为大量并发用户提供稳定的服务。

    TCP多线程服务器demo

    本示例中的“TCP多线程服务器demo”是针对初学者设计的一个实践项目,旨在帮助理解如何利用多线程技术来提高服务器的并发处理能力。 首先,TCP协议的基本概念是需要了解的。TCP是一种点对点的通信协议,它通过三次...

    C#服务器对多客服端TCP/IP多线程源码

    本示例中的"C#服务器对多客服端TCP/IP多线程源码"是一个典型的网络编程应用场景,它展示了如何使用C#语言设计一个能同时处理多个客户端连接的服务器。以下是关于这个主题的详细知识点: 1. **TCP/IP协议**:TCP...

    qt tcp多线程服务端

    了解以上知识点后,开发者可以进一步深入研究QT的网络编程API,学习如何创建和管理TCP服务器,以及如何实现多线程来提高并发处理能力。同时,还需要理解如何设计和实现通信协议,以确保客户端和服务器之间的有效通信...

    易语言TCP客户端源码,易语言单条线程TCP服务端源码,易语言多条线

    易语言是一种专为中国人设计的编程语言,它以简体中文作为编程语法,降低了编程的门槛,使得更多非计算机...通过分析和理解这些源码,开发者可以深入理解TCP通信的原理,以及如何在实际应用中利用多线程优化程序性能。

    linux下TCP聊天程序(多线程)

    ### 基于TCP协议的聊天程序(多线程)——深入解析 #### 1. 背景 ##### 1.1 开发背景 随着Linux操作系统在全球范围内的广泛应用,越来越多的人开始关注这一开源平台所带来的可能性。对于刚接触Linux的新用户而言...

    TCP单线程聊天室VB程序

    通过这个TCP单线程聊天室VB程序,你可以学习到网络编程的基础知识,以及如何利用VB来实现网络通信功能。同时,这也是一个很好的实践平台,可以进一步探索多线程、数据加密、用户认证等高级主题。

    TCP-接收线程和发送线程

    在这个项目中,“TCP-接收线程和发送线程”是一个C/C++实现的多线程编程示例,旨在展示如何在服务器端和客户端之间有效地管理数据的接收和发送。以下将详细介绍相关的知识点。 首先,我们要理解TCP的基本原理。TCP...

    tcpSever-TCP服务器端程序

    多线程设计避免了单线程模型中,处理新连接时阻塞其他连接的问题。 5. **数据处理与群发**:服务器接收到客户端的数据后,可能会对其进行解析、存储或转发。在“tcpSever”中,程序可能还包含了数据的处理逻辑,...

    多线程TCP服务端.7z

    本文将深入探讨如何利用多线程和TCP协议来实现一个服务器,作为客户端间通信的中介。我们将主要关注以下几个方面:多线程的概念、TCP服务器的工作原理以及如何在实际应用中结合系统链表进行高效的数据管理。 首先,...

    多线程并发服务器(毕业设计)

    在IT领域,多线程并发服务器是网络编程中的一个重要概念,尤其在高并发场景下,如网站、在线游戏和实时数据处理系统等。这个毕业设计的主题是“多线程并发服务器”,采用C++语言实现,这表明我们将在讨论中涵盖C++...

    基于Qt的多线程并发服务器

    总的来说,基于Qt的多线程并发服务器设计能够充分利用系统资源,为大量并发用户提供服务,是现代网络应用程序开发中的重要技术。理解并掌握这种技术,对于提升服务器性能和用户体验具有重要意义。

    多线程Web服务器的设计与实现

    本实验的主题是“多线程Web服务器的设计与实现”,这涉及到并发处理和网络通信的核心概念。下面将详细讨论相关知识点。 1. **多线程**:多线程是指在一个程序中可以同时执行多个独立的线程。在Web服务器中,多线程...

    基于TCP-IP多线程文件传输C++源代码

    2. **多线程**:多线程是程序设计中的一个重要概念,允许同时执行多个任务。在文件传输中,多线程可以提高效率,比如,一个线程负责接收数据,另一个线程负责解压和写入文件。这样,接收和处理数据可以并行进行,...

    TCP.zip_C++ TCP服务_TCP服务器_tcp 服务器_tcp server_服务器程序

    单线程服务器处理每个连接都在同一线程中,而多线程或多进程服务器则为每个连接分配单独的执行上下文,提高并发性能。然而,多线程和多进程处理也有其复杂性,需要考虑同步和资源管理问题。 总之,C++中的TCP服务器...

    TCP.rar_tcp 多线程_tcp群聊_多线程 TCP

    本项目"TCP.rar"显然关注的是如何利用TCP协议进行多线程的局域网即时通信,包括群聊和单聊功能的实现。 首先,我们要理解TCP的特点。TCP是一种面向连接的、可靠的、基于字节流的传输层通信协议。它通过三次握手建立...

    QT/C++ Tcp服务端(多线程内置自动机制,自动发送数据包,响应速度快)

    总结来说,这个QT/C++ Tcp服务端设计实现了多线程非阻塞的通信方式,具备自动处理接收和发送数据的能力,能够有效地处理高并发场景下的网络连接,确保数据处理的实时性和效率。通过学习和理解这个服务端的实现,...

    TCP并发服务器、循环服务器、客户端 UDP服务器、客户端

    循环服务器,又称单线程服务器,它在一个线程或进程中处理所有的连接请求。当有新的连接请求时,服务器会暂时挂起当前的连接,处理新的请求,然后再返回到原来的连接。这种方式减少了系统资源的开销,但可能限制了...

    基于D2010下的INDY的TCP的消息发送程序练习有多线程

    在IT领域,网络通信是至关重要的部分,而 Indy(Internet Direct) 是 Delphi 开发者常用的...通过分析和学习这个程序,开发者可以深化对 Indy、TCP 以及多线程编程的理解,为创建更复杂、高效的网络应用程序打下基础。

    tcp socket实现单进程单线程 高并发服务端(c++源码)

    然而,通过非阻塞I/O或事件驱动编程,如使用select、poll或epoll等机制,可以在单线程中处理多个并发连接。 1. **非阻塞I/O**:在非阻塞模式下,当Socket无法立即完成读写操作时,不会阻塞调用,而是立即返回一个...

Global site tag (gtag.js) - Google Analytics