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

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...

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

    Socket是网络通信的基础,它允许网络中的两个程序之间建立连接并交换数据。Socket编程为开发者提供了一种相对简单的方法来创建客户端和服务器端程序,实现双方之间的通信。在Java语言中,提供了丰富的Socket编程API...

    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 安全问题的产生 电子商务的安全问题主要源于交易环境、交易对象、交易过程的特性。与传统商务相比,电子商务无需面对面交易,而是通过互联网进行,这就...

    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