`
Luob.
  • 浏览: 1592251 次
  • 来自: 上海
社区版块
存档分类
最新评论

Socket 点对点通信

阅读更多
Socket通常称作为 "套接字",用于描述IP地址和端口,是一个通信链的句柄.应用程序通过Socket向网络发出请求或者应答网络请求.Socket是简历在网络连接时使用,在连接成功时,应用程序两端都会产生一个Socket实例,操作这个实例,完成所需的会话.

对于同一个网络连接来说,Socket是平等的,并没有差别,不因为在服务器端或在客户端,而产生不同的级别.

Socket服务器端需要在某个端口上开启服务器端类型类,java.net.ServerSocket.通过Accept()方法用户产生"阻塞",知道接收到一个连接,并且返回一个客户端的Socket对象实例."阻塞"是使程序运行暂时"停留" 在这个地方,直到一个会话产生,然后程序继续,通常 "阻塞"是有循环产生的

Socket客户端根据服务器端的IP地址和端口号 创建一个Socket对象.连接服务器.服务器端和客户端都持有有个Socket对象,服务器端的Socket从服务器端指向客户端,而客户端的Socket从客户端指向服务器端,就像在服务器和客户端建立了两条单向的管道


//ServerSocket 
package com.itheima.net.socket;

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

class SocketServer{   //Socket服务器端
	private int prot; //端口

	public SocketServer(int prot) {
		this.prot = prot;
		//这里开始启动监听
		start();
	}
	//处理信息
	public String infoUpperCase(String  line){  
		return line.toUpperCase(); //将字符串大写
	}
	
	//启动服务器
	public void start(){
		try {
			//根据端口创建服务器端Socket对象
			ServerSocket serverSocket=new ServerSocket(prot);
			System.out.println("服务器端口已启动,监听端口号为:"+prot);
			System.out.println("正在等客户端的连接......");
			
			//挂起 等待客户的请求
			Socket socketAccept= serverSocket.accept();
			//读取客户端的数据流
			BufferedReader in=new BufferedReader(new InputStreamReader(socketAccept.getInputStream()));
			
			//获取写往客户端的输出流,true表示自动刷新
			PrintWriter out=new PrintWriter(socketAccept.getOutputStream(),true);
			out.println("服务器端连接成功....");
			out.println("输入exit断开和服务器的连接");
			boolean done=false;
			while(!done){
				String line=in.readLine(); //读取客户端的每一行文本
				if(line==null){
					done=true;
				}else{
					//显示客户端发送的内容
					System.out.println("客户端传来的内容:"+line);
					String message=infoUpperCase(line); //转换信息
					out.println("从服务器端口发送的内容:"+message);
					if(line.trim().equals("exit"))	//退出判断
						done=true;
				}
			}
			socketAccept.close();
		} catch (Exception e) {
			System.out.println("启动服务器端出项错误:"+e.getMessage());
		}
		
		
	}
	
}

public class TextSocketServer {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		try {
			SocketServer server=new SocketServer(8080); //传入端口实例化对象
		} catch (Exception e) {
			System.out.println("测试服务器端监听出错:"+e.getMessage());
		}
	}
	

}


//SocketClient

package com.itheima.net.socket;

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.InetAddress;
import java.net.Socket;

class Client{
	
	private String host;   //IP地址或域名 
	private int prot;      //端口号
	public Client(String host, int prot) {
		this.host = host;
		this.prot = prot;
		//这里开始连接 
		connectionSocket();
	}
	
	//连接的方法
	public void connectionSocket(){
		try {
			Socket socketConn;
			
			if(host.equals("localhost") || host.equals("127.0.0.1")){
				socketConn=new Socket(InetAddress.getLocalHost(),prot);
			}else{
				socketConn=new Socket(InetAddress.getByName(host),prot);
			}
			
			//获得从键盘的输入流
			BufferedReader stdin=new BufferedReader(new InputStreamReader(System.in));
			
			//获得服务器内容的数据流
			PrintWriter out=new PrintWriter(socketConn.getOutputStream(),true); 
			
			//获得服务器端发送内容的缓冲流
			BufferedReader in=new BufferedReader(new InputStreamReader(socketConn.getInputStream()));
			
			System.out.println("服务器信息:"+in.readLine());  //从服务器端获取信息
			System.out.println("服务器信息:"+in.readLine());
			System.out.print("请输入>");
			boolean done=false;
			while(!done){
				String line=stdin.readLine(); 		//获得从键盘输入的每行字符 
				out.println(line);					//发送到服务器端
				if(line.equalsIgnoreCase("exit"))
					done=true;
				String info=in.readLine();
				System.out.println("服务器信息:"+info);
				if(!done)
					System.out.println("请输入>");
			}
			socketConn.close();
		} catch (SecurityException e) {
			System.out.println("连接服务器出现安全问题:"+e.getMessage());
		}catch (Exception e) {
			System.out.println("连接服务器出现I/O错误:"+e.getMessage());
		}
	}
	
	
}

public class TextSocketClient {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		try {
			new Client("localhost", 8080);	
		} catch (Exception e) {
			System.out.println("测试客户端连接出错:"+e.getMessage());
		}
	}
	
	

}
分享到:
评论

相关推荐

    socket点对点通信

    Socket,也被称为套接字,是网络编程中的一个重要概念,它是实现点对点通信的基础。...以上就是关于Socket点对点通信的相关知识点,通过理解并熟练运用Socket,开发者可以构建出高效、可靠的网络应用程序。

    QQ socket点对点通信

    QQ Socket点对点通信是一种基于Socket编程实现的网络通信方式,类似于QQ的即时通讯功能。在计算机网络中,Socket是应用程序通过编程接口与操作系统网络服务交互的一种方式,它允许两个或多个设备通过网络进行数据...

    C#中使用异步Socket实现点对点通信

    总结,C#中使用异步Socket实现点对点通信涉及多线程、非阻塞I/O、并发处理和网络协议等复杂概念。理解并熟练掌握这些知识点,对于构建高效、可靠的P2P应用程序至关重要。通过分析提供的源代码和资源,可以更深入地...

    c# socket点对点通信模型

    点对点通信模型,通常是指网络中的每一个节点都可以既是服务端(SERVER)也是客户端(CLIENT),可以同时接收和发送数据。在P2P网络中,没有中心服务器控制所有的通信,而是所有参与者之间直接进行交互。这样的设计...

    QT点对点SOCKET通信例子

    对于点对点通信,通常我们会使用TCP协议,因为TCP提供了一种可靠的数据传输方式,能够确保数据的完整性和顺序。 首先,我们需要创建一个QT项目的工程,然后引入QT的网络模块。在.pro文件中添加以下行: ```cpp QT +...

    java socket 点对点通信

    程序功能为: (1) 服务器可以接受任何客户的连接 (2) 客户程序使用命令行参数指定服务器地址 (3) 客户端输入的文本都发送给服务器 (4) 客户使用输入end时停止发送,关闭连接 (5)服务器能同时连接多个...

    C# socket winform 同步和异步通信 点对点通信 聊天 互相学习

    C# socket winform 同步和异步通信。 只供个人学习。 请不要发布到网上,纯手工制作。 同步:socket通信,客户端是WinCe项目,Windows上也可以运行,需要打开exe.不能在解决方案中调试。 异步:公共通信类 ...

    Socket支持下的网上点对点的通信

    本文详细介绍了如何利用Socket实现网络上的点对点通信,包括Socket的基本概念、创建配置、绑定监听、客户端连接以及数据的发送与接收等多个方面。通过这些步骤,可以有效地在两台计算机之间建立起稳定可靠的通信链路...

    C# Winform socket点对点信息传输mode

    以上就是关于"C# Winform socket点对点信息传输mode"的基本介绍。通过理解和实践这些知识点,你可以构建一个功能完备的点对点通信系统。共同学习,不断提升我们的IT技能,是我们在IT领域不断进步的关键。

    socket实现点对点通信.pdf

    ### Socket 实现点对点文件传输详解 #### 一、引言 随着互联网技术的发展,文件传输成为了一项日常操作。传统的文件传输方式通常依赖于FTP(文件传输协议)等专用协议,这些方法往往需要搭建专门的服务器和客户端...

    Java Socket实现简单点对点聊天软件

    Java Socket实现的简单点对点聊天软件是一种基于网络通信的C/S(客户端/服务器)架构的应用。在这个系统中,服务器端作为一个中央节点,接收并转发客户端之间的消息,而客户端则负责用户交互,发送和接收聊天内容。...

    android socket 点对点文件传输mode

    在Android平台上,Socket是实现点对点文件传输的基础工具,它允许两个设备通过网络进行通信。"Android Socket 点对点文件传输Mode"通常指的是利用Socket编程实现Android设备间的文件共享。在这个过程中,一个设备...

    基于socket的点对点聊天程序

    在IT行业中,网络通信是至关重要的一个领域,而基于socket的点对点聊天程序则是实现这一功能的基础。本文将深入探讨这个主题,讲解如何利用TCP协议通过socket接口创建一个简单的客户端-服务器架构的点对点聊天系统。...

    UDP点对点通信Socket技术(客户端)

    在点对点通信中,UDP Socket技术被广泛应用于实时音视频传输、在线游戏等领域,因为它允许数据快速发送而无需建立连接,适合对时延敏感的应用。 在VC++环境中开发UDP Socket程序,我们需要了解以下几个关键概念和...

    基于TCP/IP协议的Socket服务器,实现点对点通信

    一个自己的小程序,适合初学者学习TCP/IP与Socket套接字的使用

    基于Socket的点对点文件传输

    总的来说,基于Socket的点对点文件传输虽然简单,但它涵盖了网络通信的基础知识,包括TCP/IP协议、Socket编程、文件读写、流处理和错误控制等。理解并实现这样的程序对于深入理解网络编程是非常有帮助的。

    Node.js-使用socket.ionode.js实现的一个简单的点对点以及点对多的聊天室

    通过Node.js和Socket.IO,我们可以轻松地构建实时通信应用,如简单的点对点和点对多聊天室。理解Socket.IO的工作原理和核心特性,以及如何在Node.js环境中集成和使用,对于开发实时互动的应用至关重要。实践过程中,...

Global site tag (gtag.js) - Google Analytics