`
lfc_jack
  • 浏览: 144806 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类

socket编程三,实现多个客户端同时请求的一个服务端

阅读更多
在我的文章的socket编程二中虽然实现面向对象的编程的思想,但是还有一个致命的缺点,无法实现多用户同时请求,一旦出现多用户的时候,便会报错,所以下面再继续对socket二进行修改

第一步:再次新建一个 java project,再增加一个类,多线程类,重写父类的run方法,实现处理用户的请求,如下图所示



第二步:增加ServerThread类的代码如下:
package com.socket.Thread;

import java.io.IOException;
import java.io.InputStream;
import java.io.ObjectInputStream;
import java.io.OutputStream;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;

import com.socket.entity.User;

/**
 * 线程类
 * 
 * @author lfc
 * 
 */
public class ServerThread extends Thread {
	// 创建一个和本线程相关的socket
	Socket socket = null;
	//当创建一个线程的时候,创建一个socket
	public ServerThread(Socket socket){
		this.socket=socket;
		
		
	}
	//启动线程,重写父类的方法
	
	public void run(){

		System.out.println("服务器端准备好监听客户端的请求了。。。");
		try {
			
			// 3:获得输入流
			InputStream is = socket.getInputStream();
			// 包装下变成字符流,实现可以对对象进行反序列话操作
			ObjectInputStream ois=new ObjectInputStream(is);
			//创建输出流,用来给客户端提示的响应信息
			OutputStream os = socket.getOutputStream();
			PrintWriter pw = new PrintWriter(os);
			// 4:读取对象,获得对象
			User user=(User)ois.readObject();
			System.out.println("编号:"+user.getId());
			System.out.println("年龄:"+user.getAge());
			System.out.println("姓名:"+user.getName());
			System.out.println("密码:"+user.getPassword());
			//给客户端的回应信息
			String response="客户端已经收到你们的信息了,Success";
			pw.write(response);
			pw.flush();
			// 5:关闭资源,注意,关闭的时候,要从底部开始往上依次关闭,顺序不能错!
			os.close();
			pw.close();
			ois.close();
			is.close();
			socket.close();

		} catch (IOException e) {

			e.printStackTrace();
		} catch (ClassNotFoundException e) {
			
			e.printStackTrace();
		}

		
	}

}




第三步,User类的代码请看前面的socket二中的代码,没有修改。


第四步,修改SocketServer的服务端的代码后如下:

package com.socket.server;

import java.io.IOException;
import java.io.InputStream;
import java.io.ObjectInputStream;
import java.io.OutputStream;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;

import com.socket.Thread.ServerThread;
import com.socket.entity.User;

/**
 * 服务器端
 * 
 * @author lfc 对于这个客户端以及服务端,运行的时候,必须先服务端开始运行起来,开始监听客户端的程序请求
 * 缺点:如果是登录程序中只能监听一个用户登录程序就会进入死亡转态了
 * 为了解决多用户能够同时进行请求,需要用多线程序来改造代码
 */
public class SocketServer {

	public static void main(String[] args) {
		
		
		try {
			// 1:创建一个服务端的ServerScoket,绑定端口开始监听
			ServerSocket serverScoket = new ServerSocket(8800);
			// 2:使用accept()方法阻塞等待连接,获得新的连接
			Socket socket = null;
			//加入一个统计来自客户端的请求的数目
			int num=0;
			//一直处于监听的运行转态
			while (true) {
				socket=serverScoket.accept();
				ServerThread serverThread=new ServerThread(socket);
				//启动线程
				serverThread.start();
				num++;
				System.out.println("客户端请求的次数为:"+num);
			}

		} catch (IOException e) {

			e.printStackTrace();
		}

		
	}

}




第五步:客户端的代码  loginClient代码没有修改,请查看前面的socket二中的客户端的代码:


第六步:运行服务器端的代码:如下图所示,服务器处于监听转态:




第七步,运行客户端的代码,如下图所示




第八步,此时再次查看服务器端打印出来的内容如下图所示:




第九步,我们修改客户端的User的名字为jack   密码也修改下,然后运行一次客户端的代码,再次查看服务器端的输出内容:






到此为止,我们就实现了利用socket面向对象编程,并且实现对用户同时发送请求,如果还想要好玩点,可以把服务器端的代码放到另外的一台电脑上运行,多个客户端在电脑上,同时发送请求,主要修改的地方时,客户端发送请求的ip要需改为对应服务器端电脑的ip地址即可。






  • 大小: 13.8 KB
  • 大小: 10.6 KB
  • 大小: 13.8 KB
  • 大小: 14 KB
  • 大小: 13.1 KB
  • 大小: 19.7 KB
分享到:
评论

相关推荐

    MFC:Socket编程—TCP服务端和多个客户端通信 示例代码

    在本文中,我们将深入探讨MFC(Microsoft Foundation Classes)中的Socket编程,特别是如何实现一个TCP服务端与多个客户端之间的通信。MFC是微软提供的一套C++类库,用于简化Windows应用程序开发,其中包括对网络...

    C#使用Socket实现服务器与多个客户端通信(简单的聊天系统)

    在本文中,我们将深入探讨如何使用C#编程语言通过Socket实现一个简单的聊天系统,使得服务器可以与多个客户端进行通信。Socket在计算机网络编程中扮演着重要角色,它提供了进程间通信(IPC)的能力,允许不同计算机...

    C++Socket编程实例(服务端跟客户端通信).rar

    5. **多线程或异步处理**:在实际应用中,服务器可能会同时处理多个客户端的连接请求,这可能需要使用多线程或者异步IO模型,如 select、poll 或者 epoll 等。 6. **错误处理**:在编写 Socket 程序时,需要对可能...

    c#多线程socket开发(一个服务器对多个客户端)

    C#语言开发多线程Socket服务器端程序,实现一个服务器同时与多个客户端连接对话。这里,我们将详细讲解如何使用C#语言开发多线程Socket服务器端程序,实现一个服务器同时与多个客户端连接对话。 多线程Socket服务器...

    多客户端和服务端通讯

    当一个客户端连接到服务器时,服务器会为该连接创建一个新的线程,这样就能同时处理多个客户端的请求。Java中的ServerSocket类可以用于监听客户端的连接请求。 描述中提到的“上线提示”,意味着服务端需要记录在线...

    C# winform实现一个服务端和多个客户端进行通信

    在本文中,我们将深入探讨如何使用C#编程语言在Windows Forms(Winform)环境中实现一个服务端和多个客户端之间的通信。TCP(传输控制协议)和Socket是网络编程中常用的技术,用于建立可靠的、面向连接的数据传输。...

    socket编程 TCP文件的传输实现 客户端和服务端

    在IT领域,网络通信是不可或缺的一部分,而Socket编程则是实现这一目标的核心技术。TCP(Transmission Control Protocol)是一种面向连接的、可靠的传输协议,它保证了数据的有序、无损传输。本资源旨在帮助初学者...

    socket 一个服务器对应多个客户端使用多线程

    总的来说,使用Socket和多线程技术,我们可以构建出能够高效处理多个客户端请求的服务器。这种模型广泛应用于各种网络服务,如Web服务器、邮件服务器、数据库服务器等。理解并熟练掌握这些技术对于任何IT专业人员来...

    Socket聊天程序(一个服务端,多个客户端)

    Socket聊天程序是一个基于C#编程语言实现的网络通信应用,它允许一个服务端与多个客户端进行实时交互。在本文中,我们将深入探讨Socket编程的基本概念、C#中的Socket类、服务器端与客户端的设计以及如何实现多用户...

    WPF-Socket服务端对多个客户端_新

    标题中的“WPF-Socket服务端对多个客户端_新”表明这是一个更新过的版本,解决了之前版本的一些问题,使得服务端能够有效地处理来自多个客户端的数据传输。 Socket编程是一种基于网络通信协议(如TCP/IP)的应用...

    HP用SOCKET实现(客户端---服务端)

    本文将深入解析如何利用PHP中的Socket编程技术实现客户端与服务端之间的通信,通过分析提供的代码示例,我们将理解其工作原理、关键步骤以及在实际应用中的注意事项。 ### Socket编程基础 Socket编程是一种用于...

    Java编程Socket实现多个客户端连接同一个服务端代码

    Java编程Socket实现多个客户端连接同一...Java编程Socket实现多个客户端连接同一个服务端代码是Java编程中的一种常见应用场景,使用Socket可以实现客户端和服务端之间的通信,并满足了多个客户端同时连接服务端的需求。

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

    Java的`java.nio`包提供了非阻塞I/O的支持,可以同时处理多个客户端连接,提高了服务器的并发能力。 总结起来,基于TCP的Socket编程是构建网络应用的基础,涉及网络连接的建立、数据的可靠传输和通信链路的维护。...

    c++实现socket:一个服务器对应多个客户端相互传递信息

    标题 "c++实现socket:一个服务器对应多个客户端相互传递信息" 指的是利用C++的socket API创建一个服务器程序,该服务器可以同时处理来自多个客户端的连接请求,并允许这些客户端之间交换数据。这种设计模式通常称为...

    vc ,socket编程含客户端和服务端

    - **接受连接(Accept)**:当有客户端请求连接时,服务端调用`accept`函数接收连接,并返回一个新的socket句柄用于和客户端通信。 4. **客户端编程**: - **连接(Connect)**:客户端使用`connect`函数向服务端...

    qt tcp 一个服务端对多个客户端

    "qt tcp 一个服务端对多个客户端"的场景常见于例如聊天应用、在线游戏或者数据同步等应用中。下面我们将详细探讨如何使用Qt实现这样的通信模型。 1. **TCP基础**:TCP是一种面向连接的、可靠的、基于字节流的传输层...

    C语言实现socket服务端和客户端

    当有客户端请求连接时,使用`accept()`函数接收连接并返回一个新的socket描述符,用于处理客户端的数据。 ```c struct sockaddr_in client; int client_sock = accept(socket_desc, (struct sockaddr *)&client...

    TCPSocket编程客户端和服务端

    例如,服务器可能需要使用线程池或事件驱动模型来并发处理来自多个客户端的请求。 压缩包文件"TCPSocket"可能包含了示例代码,这些代码可以帮助初学者更好地理解TCP Socket编程的实践。通过阅读和运行这些代码,你...

    C#SuperSocket服务端与客户端通信实例

    - **多线程/异步处理**: 对于高并发场景,服务端可能需要使用多线程或异步操作来处理多个客户端请求,避免阻塞。 在提供的压缩包文件"SuperSocket"中,你应该能找到更详细的示例代码和文档,帮助你进一步理解和实践...

    Socket服务端客户端以tcp/ip协议发送接收报文

    当有客户端连接时,会创建一个新的线程来处理这个连接,这样可以同时处理多个客户端请求。`ServerThread`类负责读取客户端发送的数据,打印出来,并将接收到的消息原样返回给客户端。 接着,我们看客户端的实现。...

Global site tag (gtag.js) - Google Analytics