非常简单的Socket聊天程序

新手一枚   不好别喷的太严重了


建立 服务端 :


import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;
/**
 * 
 * @author bigSea
 *	Socket服务端
 */
public class MyTcpService {
	
	public static void main(String[] args) {
		System.out.println("主机启动。。。");
		try {
			//创建服务器,并开放10000端口
			ServerSocket server = new ServerSocket(10000);
			while(true){
				//从连接队列中取出一个连接,如果没有则等待
				Socket socket = server.accept();
				//启动线程
				new Thread(new ToClientDialog(socket)).start();
				System.out.println("客户端连接成功      地址:"+socket.getInetAddress()+"   端口:"+socket.getPort());//接收和发送数据
				
			}
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
}


ToClientDialog类:

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.Socket;
import java.text.SimpleDateFormat;
import java.util.Date;
/**
 * 
 * @author bigSea
 *	向客户端发送数据
 */
public class ToClientDialog implements Runnable{

	private Socket dialogSocket = null;
	
	public ToClientDialog() {
		super();
	}
	
	//初始化
	public ToClientDialog(Socket socket){
		dialogSocket = socket;
	}
	
	public void run() {
		
		SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
		
		if (dialogSocket != null) {
			BufferedReader in;
			PrintWriter out;
			try {
				//接收
				in = new BufferedReader(new InputStreamReader(dialogSocket.getInputStream()));
				//输出
				out = new PrintWriter(dialogSocket.getOutputStream(), true);
				//获取用户输入
				BufferedReader line = new BufferedReader(new InputStreamReader(
						System.in));
				while(true){
					//接收客户端发送来的数据
					String msg = in.readLine();
					if (msg.equals("end")) {
						break;
					}
					System.out.println(sdf.format(new Date()) + "  client:" + msg);
					//向客户端发送用户输入的数据
					out.println(line.readLine());
				}
				
				line.close();
				out.close();
				in.close();
			} catch (IOException e) {
				e.printStackTrace();
			}
		}
	}
	
}

客户端代码:


import java.io.IOException;
import java.net.Socket;
import java.net.UnknownHostException;

/**
 * @author bigSea
 *  Socket 服务端
 */
public class MyTcpClient {
	
	public static void main(String[] args) {
		System.out.println("客户机启动。。。");
		Socket socket;
		try {
			//连接主机地址。
			socket = new Socket("192.168.72.175", 10000);
			//启动
			new Thread(new ToServiceDialog(socket)).start();
			
		} catch (UnknownHostException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
}


ToServiceDialog代码:

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.Socket;
import java.text.SimpleDateFormat;
import java.util.Date;

/**
 * 
 * @author bigSea
 *  向服务端发送信息
 */
public class ToServiceDialog implements Runnable {

	private Socket dialogSocket = null;	
	
	public ToServiceDialog(){
	}
	
	//初始化
	public ToServiceDialog(Socket socket){
		dialogSocket = socket;
		System.out.println("连接"+socket.getInetAddress().getHostName()+"主机成功");
	}
	
	public void run() {
		BufferedReader in;
		PrintWriter out;
		BufferedReader line;

		SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
		if (dialogSocket != null) {
			try {
				//接收
				in = new BufferedReader(new InputStreamReader(
						dialogSocket.getInputStream()));
				//输出
				out = new PrintWriter(dialogSocket.getOutputStream(), true);
				//获取用户输入
				line = new BufferedReader(new InputStreamReader(
						System.in));
				while(true){
					//接受控制台输入的数据
					String sendMsg = line.readLine();
					//向服务端发送数据
					out.println(sendMsg);
					if (sendMsg.equals("end")) {
						break;
					}
					//接收服务端发送来的数据
					String msg = in.readLine();
					System.out.println(sdf.format(new Date()) + "  service:" + msg);
				}
				line.close();
				out.close();
				in.close();
			} catch (IOException e) {
				e.printStackTrace();
			}
		}
	}

}



演示效果:




一共包括10个以上的聊天程序版本!绝对物有所值! 为感谢大家长期的支持,我将下载所需的资源分下调为2。网络聊天程序设计(可选)  实验要求 1、分析典型网络聊天应用软件(如QQ、MSN等)的实现原理,模拟设计一套网络聊天应用程序,必须实现以下功能: ①按照C/S结构分别设计服务端程序和客户端程序; ②服务端通过图形用户界面实现对服务器的控制,负责维护用户帐户和用户群,并维护用户信息、维持客户端之间的端对端通信和群聊通信、适时维护用户在线信息,并能够发送广播消息。 2、增加尽可能多的功能,用户界面友好,操作简便,代码设计遵从程序设计规范,易读性强,对关键过程和代码进行标注说明。 3、程序设计过程遵从软件工程规范,有需求分析、系统设计和详细设计过程,有相应的规范化说明文档。  实验提示 1、客户端之间的通信是通过服务器进行转发的,对于两个客户端,服务器需要创建两个套接字分别维持与客户端之间的连接。当客户端需要向另一个客户发送消息时,它首先将消息发送到服务器,由服务器根据目标用户帐户转发到目标主机。 2、群聊是采用多播技术实现的,也可以采用单播技术实现,但是服务器开销会增加。具体说来,若采用组播技术,当服务端收到来自一个客户端的消息后,向预先分配的该组组播地址转发该消息。若采用单播技术,服务端需要向该组内的所有客户端一一转发该消息。 3、广播消息通过广播方式发送由服务端创建的消息。 4、服务端根据客户的连接和断开情况,实时向其它客户端发送用户在线信息。 实验题目二:自选网络通信程序设计(可选)  实验要求 可以自选与网络通信相关的设计题目,要求如下: 1、在确定实验题目、设计内容以及设计功能指标要求后,向实验指导教师提交书面申请,由实验指导教师根据所选实验题目的难度和工作量确定立题后方能开始实验。 2、选择的实验题目必须具有一定综合性,并能够利用网络通信原理加以解决,同时需要具备一定的工作量。 3、设计的结果要求用户界面友好,操作简便,代码设计遵从程序设计规范,易读性强,对关键过程和代码进行标注说明。 4、程序设计过程遵从软件工程规范,有需求分析、系统设计和详细设计过程,有相应的规范化说明文档。 5、严禁抄袭别人成果,但可以部分借鉴。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值