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

Socket 点对面 通信

阅读更多

Socket 点对面 通信
创建多客户连接的socket通信的方式,是在服务器端创建客户连接请求的监听线程,一旦客户发起请求,则服务器端用户创建和此客户端通信线程的和Socket,服务器把此客户端的通信交给此线程进行处理.同时继续在服务器的指定端口进行监听,来响应其他客户端的请求.


//TextFaceServer.java
  

package com.itheima.net.socket;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;
/**
 * 点对面  server
 */

//操作Socket服务器端的类
public class TextFaceServer { 
	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		try {
			new FaceServer(8080);
		} catch (Exception e) {
			System.out.println("服务器端进行端口监听出现异常:"+e.getMessage());
		}
	}

}


class FaceServer extends ServerSocket{

	private int port;							//端口号
	public FaceServer(int port) throws IOException {
		super(port);
		this.port=port;
		System.out.println("服务器已启动,监听端口为:"+port);
		System.out.println("正在等待客户端的连接.....");
		try {
			while (true) {
				Socket socketCon=accept();
				new ServerThread(socketCon,port);
			}
		} catch (Exception e) {
			System.out.println("没有监听到客户端的信息.....");
		}finally{
			close();
		}
		
	}
}

//继承线程类 实现 服务器线程
class ServerThread extends Thread{
	private int port;					//端口
	private Socket socketCon;			//获得连接对象
	
	private BufferedReader in;
	private PrintWriter out;
	public ServerThread(Socket socketCon,int port) throws Exception {
		this.port = port;
		this.socketCon = socketCon;
		//获取客户端的数据流
		in=new BufferedReader(new InputStreamReader(this.socketCon.getInputStream(),"gb2312"));
		//获取写往客户端的数据输出流,true表示自动刷新
		out=new PrintWriter(socketCon.getOutputStream(),true);
		//向客户端发送连接信息
		out.println("服务器端连接成功.....");
		out.println("输入exit断开与服务器的连接");
		start();   //启动线程
	}
	
	//处理信息的方法
	public String infoUpperString(String line){
		return line.toUpperCase();
	}
	
	//线程的run方法
	public void run(){
		try {
			boolean done=false;
			while (!done) {
				String line=in.readLine();  //	读取客户端的每行信息
				if(line==null){
					done=true;
				}else{
					System.out.println("客户端传来的内容:"+line);
					String message=infoUpperString(line);
					
					out.println("从服务器端口发送的内容:"+message);
					if(line.trim().equals("exit"))
						done=true;
				}
			}
		  System.out.println("客户端终止发送信息......");
		  socketCon.close();  //关闭通信资源
		}catch (Exception e) {
			System.out.println("启动服务器端出现错误:"+e.getMessage());
		}
	}
	
}


//TextPointClient.java
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;

/**
 * 点对面   client
 * @author Bin
 *
 */
public class TextPointClient {

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

}


class PointClient{        				//Socket点客户端
	private String host;				//Ip地址 或者域名
	private int port;					//端口
	public PointClient(String host, int port) {
		this.host = host;
		this.port = port;
		connectionSocket();
	}
	
	//连接的方法
		public void connectionSocket(){
			try {
				Socket socketConn;
				
				if(host.equals("localhost") || host.equals("127.0.0.1")){  //创建本地连接
					socketConn=new Socket(InetAddress.getLocalHost(),port);
				}else{
					socketConn=new Socket(InetAddress.getByName(host),port);  //创建远程连接
				}
				
				//获得从键盘的输入流
				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());
			}
		}
	
	
}


0
0
分享到:
评论
1 楼 从百草园到三味书屋 2013-03-13  
人类已无法阻挡ITEYE的“博文推荐”功能了~

相关推荐

    Swing写的局域网Socket 聊天系统

    综合这些信息,我们可以了解到这个项目是一个使用Java Swing开发的本地网络聊天软件,具备基本的用户登录功能,利用Oracle数据库存储登录信息,并通过Socket实现点对点和点对面的消息传递。服务器端和客户端的代码...

    点对点面对面聊天室o(∩_∩)o...o(∩_∩)o...

    点对点面对面聊天室是一种基于网络通信技术的实时通讯应用,允许用户之间进行直接的信息交流。在本项目中,开发者使用了C#编程语言来构建这样一个聊天系统,它可能包括客户端和服务器端两部分,实现了基本的文字聊天...

    软件工程课程设计报告报告Socket聊天系统.doc

    Socket编程是网络编程中的核心技术,它允许两个或多个设备通过网络进行通信。在这个系统中,Socket将作为客户端与服务器之间的桥梁,使得用户能够进行实时的文本、音频、视频交流,以及一些附加功能如点歌、分组管理...

    基于Android的实时视频通信研究与实现.pdf

    实时视频通信是现代通信技术中的一个重要组成部分,它允许用户通过网络进行面对面的视频交流,极大地增强了远程沟通的效率和体验。在Android平台上实现这一功能,需要结合多种技术和协议,包括SIP(Session ...

    MFC聊天室的设计与实现

    聊天室是一种多点通信程序,它实现了多个输入/输出端点之间的多对多通信,类似于一群人面对面地交谈。尽管许多聊天软件都是免费提供的,并且功能也越来越强大,但它们通常需要互联网连接才能使用。因此,开发一款...

    chatroom.rar

    接下来,**Socket.IO**是一个实时应用库,它在客户端和服务器之间提供双向通信。它在WebSocket协议之上提供了额外的功能,如心跳检测、重连机制和消息广播。在聊天室中,Socket.IO负责将用户的输入实时传输到其他...

    VB下的winsock简单编程例子

    本资源提供了在VB环境下使用Winsock进行简单编程的实例,特别关注了多客户端的点对点和点对面通讯模式。 首先,让我们了解Winsock控件的基本结构和属性: 1. **控件添加**:在VB中,你可以通过控件工具箱将Winsock...

    realtime_chat:使用 Node 和 socket.io 的实时聊天应用程序

    Node.js是一个基于Chrome V8引擎的JavaScript运行环境,它允许开发者在服务器端使用JavaScript编写代码,而socket.io则是一个实时应用框架,它为实时双向通信提供了简单易用的API。 在Node.js中,我们可以使用...

    基于Flash 的国外视频聊天程序

    4. **Socket通信**:在某些情况下,Flash还可能利用Socket进行双向通信,实现更灵活的数据交换,比如私聊、群聊、发送文件等高级功能。 5. **服务器架构**:视频聊天程序通常需要一个强大的后端来处理大量的并发...

    parasiteChat:使用 johnny-5、webAudio、openTok 和 socket.io 的艺术装置

    **Socket.IO** 是一个实时应用框架,它提供了双向的实时通信机制。在 parasiteChat 中,Socket.IO 负责在客户端和服务器之间建立持久的连接,实现实时的消息传递。用户一旦发送消息,其他在线的参与者能立即接收到,...

    音乐播放器

    作为一款现代的音乐播放器,它不仅具备基础的播放、暂停、上一曲、下一曲等操作,还增加了创新性的功能,如摇一摇切歌和通过socket实现的面对面传歌,以及个性化的音效设置。 摇一摇切歌是音乐播放器中的一个趣味性...

    Flex实现的视频聊天室

    这个聊天室允许用户通过网络摄像头分享视频,并进行音频通信,提供了类似于现实生活中面对面交谈的体验。 Flex框架包含Adobe Flex SDK,它包含了编译Flex应用所需的编译器、库和工具。开发人员可以使用Flex Builder...

    P2P聊天系统 思路清晰!

    - **套接字编程**:C#中的System.Net.Sockets命名空间提供了Socket类,用于实现基于TCP或UDP的网络通信。在P2P系统中,通常选择TCP协议,因为它能确保数据的可靠传输。 - **监听与连接**:服务器端需创建一个监听...

    nodejs搭建的webrtc视频聊天室

    - Socket.IO可以实现实时双向通信,非常适合于WebRTC的信令传输。 5. 实施步骤: - 创建Node.js项目,安装必要的依赖,如express、socket.io等。 - 设计WebSocket或HTTP信令系统,处理offer、answer和candidate...

    试谈电子商务系统的安全需求(ppt-41页).ppt

    以下是对标题和描述中提及的几个关键知识点的详细解释: 2.1 安全问题的产生 电子商务的安全问题主要源于交易环境、交易对象、交易过程的特性。与传统商务相比,电子商务无需面对面交易,而是通过互联网进行,这就...

    于基cs模型的java聊天室---本科毕业设计.doc

    Socket是Java中需要编写较低层次的网络通信程序时提供的一种通讯机制,用于两个程序进行双向数据传输的网络通信的端点。 本文档详细介绍了基于C/S模型的Java聊天室系统的设计和实现,包括系统的特点、开发意义、...

    xy.rar_joyq81_vb 局域网_vb 局域网聊天_办公软件_聊天

    VB提供了Socket编程接口,可以实现TCP/IP通信,让应用能在局域网内发送和接收数据,实现聊天功能。 3. **办公自动化**:办公自动化是指通过信息技术改进工作流程,提高工作效率。这款聊天软件就是其中一种工具,它...

    基于Java的远程视频会议系统(系统+LW).zip

    Java远程视频会议系统是一种利用网络技术实现实时音视频通信的应用,它能够让身处不同地理位置的参与者通过互联网进行面对面的交流。这种系统通常包含多个核心组件,如音视频编码解码、数据传输、多路混音、屏幕共享...

    Qt五子棋(网络版)

    网络对战功能的实现基于网络通信技术,这涉及到TCP/IP协议、socket编程等网络编程基础。开发者可能使用了Qt自带的QNetworkAccessManager和QNetworkReply类来处理网络请求和响应,确保数据的可靠传输。 聊天功能是...

Global site tag (gtag.js) - Google Analytics