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

socket编程二,面向对象编程

 
阅读更多
由于第一个socket编程实现的是传递一个字符串,无法实现一个对象传递,下面来改造上次编写的代码实现面向对象编程.

第一步:新建一个java project,增加一个User类 如下图:






第二步:编写User类的代码,代码如下所示:


package com.socket.entity;

import java.io.Serializable;

/**
 * 用户实体类
 * 
 * @author lfc 备注:如果这个实体类需要通过socket类来实现传递,必须实现 Serializable接口
 */
public class User implements Serializable {

	private static final long serialVersionUID = -8828187863940569914L;
	private long id;
	private String name;
	private String password;
	private int age;

	public long getId() {
		return id;
	}

	public void setId(long id) {
		this.id = id;
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public String getPassword() {
		return password;
	}

	public void setPassword(String password) {
		this.password = password;
	}

	public int getAge() {
		return age;
	}

	public void setAge(int age) {
		this.age = age;
	}

	public User() {

	}

	public User(long id, String name, String password, int age) {

		this.id = id;
		this.name = name;
		this.password = password;
		this.age = age;
	}

}


第三步,修改服务器端后的代码如下:


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.entity.User;

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

	public static void main(String[] args) {
		
		System.out.println("服务器端准备好监听客户端的请求了。。。");
		try {
			// 1:创建一个服务端的ServerScoket,绑定端口开始监听
			ServerSocket serverScoket = new ServerSocket(8800);
			// 2:使用accept()方法阻塞等待连接,获得新的连接
			Socket socket = serverScoket.accept();
			// 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();
			serverScoket.close();

		} catch (IOException e) {

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

		System.out.println("本次服务端监听结束!。。。");
	}

}




第四步,修改客户端的代码后如下:


package com.socket.client;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.ObjectOutputStream;
import java.io.OutputStream;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;
import java.net.UnknownHostException;

import com.socket.entity.User;

/**
 * 客户端
 * 
 * @author lfc
 * 
 */
public class loginClient {

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

		try {
			// 1,创建serverScoket客户端,绑定服务器端的ip以及端口
			Socket scoket = new Socket("localhost", 8800);
			// 2,得到scoket读写流
			OutputStream os = scoket.getOutputStream();
			// 获得对象输出流,可以对对象进行序列化操作
			ObjectOutputStream oos=new ObjectOutputStream(os);
			//输入流
			InputStream is=scoket.getInputStream();
			BufferedReader br=new BufferedReader(new InputStreamReader(is));
			// 3,利用一定的协议对scoket中的对读写操作
			PrintWriter pw = new PrintWriter(os);
			User user=new User();
			user.setId(1);
			user.setAge(19);
			user.setName("tom");
			user.setPassword("AAbb123");
			oos.writeObject(user);
			//需要先关闭,一定要记得先关闭
			scoket.shutdownOutput();
			//接收并显示收到服务器端返回的信息!
			String answer = null;
			while (!((answer = br.readLine()) == null)) {
				System.out.println("我是服务器端接收并且给返回的信息:\n" + answer);

			}
			// 4,关闭流
			
			is.close();
			oos.close();
			br.close();
			os.close();
			scoket.close();

		} catch (IOException e) {

			e.printStackTrace();
		}
		System.out.println("客户端请求完毕!");
	}

}





第五步:运行服务器端的代码,控制台输出的内容如下:







可以看见,运行服务器端后,服务器处于监听转态

第六步:运行客户端的代码,结果如下图:








此时客户端收到来自服务器的回应,并且显示success

第七步,再次查看服务器端的控制台输出的内容如下:






服务器端,收到来自客户端的一个对象,并且实现面向对象编程了。








  • 大小: 11.3 KB
  • 大小: 10.8 KB
  • 大小: 13.1 KB
  • 大小: 13.9 KB
分享到:
评论

相关推荐

    实验一_SOCKET编程实验

    **实验一: SOCKET编程实验** 在计算机网络领域,Socket编程是一种基本的通信方式,它允许两个应用程序通过网络进行数据交换。本实验旨在帮助学生深入理解SOCKET编程的概念、原理及其实现过程,以便于掌握网络通信...

    网络编程1Socket编程

    在TCP Socket编程中,首先需要创建Socket对象,然后建立连接(三次握手),接着进行数据传输,最后断开连接(四次挥手)。 **UDP(User Datagram Protocol)** 是一种无连接的、不可靠的传输协议,适合于对实时性...

    总结java_socket编程.doc

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

    基于TCP/IP的socket编程

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

    VC++6.0中socket编程学习教程汇集

    Socket编程是计算机网络通信的核心技术之一,特别是在Windows环境下,如VC++6.0这样的开发工具中,它提供了强大的网络通信功能。本教程汇集了多个关于VC++6.0中Socket编程的学习资源,包括文档和演示文稿,旨在帮助...

    Java面向对象精髓编程

    面向对象编程(Object-Oriented Programming,OOP)是一种编程范式,它的核心思想是将现实世界的问题转化为计算机可以理解的模型,即对象。在Java中,对象是类(class)的实例。类定义了对象的属性(fields)和行为...

    Linux下使用C++进行Socket编程

    在Linux操作系统中,Socket编程通常采用C语言,因为传统的GNU C库提供了丰富的Socket API函数,但这些函数是面向过程设计的,没有面向对象的封装,使用起来比较复杂。利用C++进行Socket编程,可以通过自定义类来封装...

    Socket编程实例

    Socket编程是网络编程中的核心部分,它允许两个网络应用程序通过TCP/IP协议进行通信。在这个C#的实例中,我们探讨了如何使用Socket类创建一个简单的聊天通信程序,包括客户端和服务端的实现。以下是对这个主题的详细...

    Socket编程概述 ppt

    在Socket编程中,首先需要创建一个Socket对象,然后指定其使用的协议类型(如TCP)。接下来,服务器端会绑定一个特定的IP地址和端口号,监听客户端的连接请求。当客户端发起连接请求时,服务器端接受连接,从而创建...

    socket编程

    在这个主题中,我们将深入探讨Socket编程的基础知识,包括IP地址操作、DNS解析以及面向连接的TCP Socket编程。 首先,我们来看IP地址操作类。IPAddress类是处理IP地址的核心类,它提供了Parse()方法,将点分十进制...

    SOCKET编程的入门知识精华

    Socket编程是计算机网络通信中的重要概念,它是操作系统提供的一个接口,允许应用程序进行网络通信。本资源包中的"Socket编程"涵盖了SOCKET编程的基础知识,是初学者入门的绝佳材料。以下将详细介绍Socket编程的一些...

    用Socket编程实现电子邮件的发送

    #### 二、Socket编程实现电子邮件发送的步骤 1. **服务器端设置**: - 创建服务器Socket,绑定到本地主机的某个端口上。 - 服务器进入监听状态,等待客户端的连接请求。 - 接收客户端的连接,并为每个连接创建一...

    Java Socket 编程html教程

    Java Socket编程是Java网络编程的重要组成部分,主要用于实现客户端与服务器之间的通信。在本文中,我们将深入探讨Java Socket编程的基础知识,以及如何结合HTML进行交互。 首先,Java Socket是TCP/IP协议族的一...

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

    本主题聚焦于使用Java进行基于TCP的Socket编程,通过`File_client.java`和`File_server.java`两个文件来实现服务器和客户端之间的数据交换。 首先,TCP Socket编程的基础是Java的`java.net.Socket`和`java.net....

    Socket编程经典例子源码

    Socket编程是计算机网络编程中的重要组成部分,主要用于实现进程间的通信,尤其在网络环境中,它提供了不同计算机间进程数据传输的桥梁。本资料集包含了Socket编程的一些经典实例源码,旨在帮助开发者深入理解和应用...

    Socket编程

    Socket编程是计算机网络通信中的重要概念,主要用于实现进程间的网络通信。在标题“Socket编程”中,我们聚焦的是服务器端的Server Socket和客户端的Client Socket。Socket是网络编程的一个抽象接口,它允许两个运行...

    socket编程 socket编程

    二、TCP Socket编程 1. 创建Socket:在客户端,首先创建一个Socket对象,指定服务器的IP地址和端口号,通过connect()方法建立到服务器的连接。在服务器端,先调用bind()绑定一个端口,然后调用listen()监听该端口,...

    java的Socket编程

    Java的Socket编程是Java网络编程的核心部分,它提供了在TCP/IP协议栈上进行通信的机制。Socket接口是对TCP/IP协议的抽象,使得开发者能够轻松地创建客户端和服务器应用程序,实现网络上的数据交换。在这个主题中,...

    最基本的Socket编程例子

    Socket编程是计算机网络通信的核心技术之一,主要用于实现不同设备之间的数据传输。在这个“最基本的Socket编程例子”中,我们将深入理解Socket的基本概念、工作原理以及如何在实际编程中应用。 Socket,通常被称为...

    socket编程 P2P

    Socket编程是计算机网络通信中的重要概念,特别是在点对点(P2P)网络中,它提供了基础的通信机制。在本文中,我们将深入探讨Socket编程的核心概念,包括TCP协议的应用,以及如何使用C#、Java和C语言进行Socket编程...

Global site tag (gtag.js) - Google Analytics