Socket编程简单实现局域网多人互聊

首先  我们要确认的是在同一个局域网,客户端使用的IP地址是Server的IP地址和Server的端口。这样接下来我们就能实现简单的互聊。

package com.blueZhang;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.ArrayList;

public class Demo6 {

	public static void main(String[] args) {

		ArrayList<Socket> list = new ArrayList<Socket>();//用于存储客户端的Socket的信息的

		try {

			ServerSocket ss = new ServerSocket(9999);//创建服务器对象

			System.out.println("服务器启动");

			while (true) {//循环接收 如果有客户端那么久接收并创建客户端的对象

				Socket s = ss.accept();//创建客户端的对象

				System.out.println(s.getInetAddress().getHostAddress() + "已连接");//输出某某某已经连接

				list.add(s);//添加到list中

				new Thread(new MyThread12(s, list)).start();//启动服务器端的线程
			}
		} catch (IOException e) {

			e.printStackTrace();
		}
	}

}

class Demo6Thread implements Runnable {
	private ArrayList<Socket> list = new ArrayList<Socket>();//存储客户端的Socket对象

	private Socket s;

	public Demo6Thread(Socket s, ArrayList<Socket> list) {//使用构造函数初始化

		this.s = s;//初始化

		this.list = list;
	}

	@Override
	public void run() {

		try {

			InputStream is = s.getInputStream();//使用InputStream获取S中的信息

			BufferedReader br = new BufferedReader(new InputStreamReader(//创建br 用于接收客户端的信息
					is));

			String a = "";//中间变量

			while (true) {

				a = br.readLine();//获取输入流中的信息

				String line = s.getInetAddress().getHostAddress() + "说:" + a;//组合字符串

				System.out.println(line);//打印说话的内容

				for (int i = 0; i < list.size(); i++) {//遍历集合 

					Socket si = list.get(i);//获取集合中的Socket

					PrintWriter pw = new PrintWriter(si.getOutputStream(), true);//获取其中的输出流

					pw.println(line);//放入输入流

					pw.flush();//刷新缓冲区
				}

			}
		} catch (IOException e) {

			e.printStackTrace();
		} finally {
			if (s != null) {
				try {
					s.close();//关闭流操作
				} catch (IOException e) {

					e.printStackTrace();
				}
			}
		}

	}

}
package com.blueZhang;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.ArrayList;

public class Demo6 {

	public static void main(String[] args) {

		ArrayList<Socket> list = new ArrayList<Socket>();//用于存储客户端的Socket的信息的

		try {

			ServerSocket ss = new ServerSocket(9999);//创建服务器对象

			System.out.println("服务器启动");

			while (true) {//循环接收 如果有客户端那么久接收并创建客户端的对象

				Socket s = ss.accept();//创建客户端的对象

				System.out.println(s.getInetAddress().getHostAddress() + "已连接");//输出某某某已经连接

				list.add(s);//添加到list中

				new Thread(new MyThread12(s, list)).start();//启动服务器端的线程
			}
		} catch (IOException e) {

			e.printStackTrace();
		}
	}

}

class Demo6Thread implements Runnable {
	private ArrayList<Socket> list = new ArrayList<Socket>();//存储客户端的Socket对象

	private Socket s;

	public Demo6Thread(Socket s, ArrayList<Socket> list) {//使用构造函数初始化

		this.s = s;//初始化

		this.list = list;
	}

	@Override
	public void run() {

		try {

			InputStream is = s.getInputStream();//使用InputStream获取S中的信息

			BufferedReader br = new BufferedReader(new InputStreamReader(//创建br 用于接收客户端的信息
					is));

			String a = "";//中间变量

			while (true) {

				a = br.readLine();//获取输入流中的信息

				String line = s.getInetAddress().getHostAddress() + "说:" + a;//组合字符串

				System.out.println(line);//打印说话的内容

				for (int i = 0; i < list.size(); i++) {//遍历集合 

					Socket si = list.get(i);//获取集合中的Socket

					PrintWriter pw = new PrintWriter(si.getOutputStream(), true);//获取其中的输出流

					pw.println(line);//放入输入流

					pw.flush();//刷新缓冲区
				}

			}
		} catch (IOException e) {

			e.printStackTrace();
		} finally {
			if (s != null) {
				try {
					s.close();//关闭流操作
				} catch (IOException e) {

					e.printStackTrace();
				}
			}
		}

	}

}

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-10-08 07:04:16

Socket编程简单实现局域网多人互聊的相关文章

Qt学习心得之网络编程简单的局域网聊天服务端建立

学而不思则罔,思而不学则殆.学习和思考是相辅相成的,通过这几天对网络编程的学习,收获颇丰.接下来我将利用Qt做的一个以TcpIp协议为传输方式的简单的局域网聊天服务端与大家分享下: 首先谈谈我个人对Tcp协议的理解:Tcp就是网上购物,买家和买家之间的物品传递,快递公司的扮演.快递公司将卖家所要寄出的物品进行包装,给予独特的号码,并从卖家获取目的地地址,得知这些明确信息后准确将物品送到买家,买家签收后,卖家通过快递单号查询到买家签收的消息. 其次是这个简单局域网聊天服务器的创建思路.如下图是思路

java socket编程简单样例(客户端+服务器)

//客户端 package test; import java.io.*; import java.net.*; import java.applet.Applet; public class TalkServer{ public static void main(String args[]) { try{ ServerSocket server=null; try{ server=new ServerSocket(4700); //创建一个ServerSocket在端口4700监听客户请求 }

MFC socket编程(浅出+深度:服务端和客户端端口问题)

要写网络程序就必须用Socket,这是程序员都知道的.而且,面试的时候,我们也会问对方会不会Socket编程?一般来说,很多人都会说,Socket编程基本就是listen,accept以及send,write等几个基本的操作.是的,就跟常见的文件操作一样,只要写过就一定知道. 对于网络编程,我们也言必称TCP/IP,似乎其它网络协议已经不存在了.对于TCP/IP,我们还知道TCP和UDP,前者可以保证数据的正确和可靠性,后者则允许数据丢失.最后,我们还知道,在建立连接前,必须知道对方的IP地址和

基于java的简单Socket编程

1TCP协议与UDP协议     1.1 TCP               TCP是(Tranfer Control Protocol)的简称,是一种面向连接的保证可靠传输的协议.通过TCP协议传输,得到的是一个顺序的无差错的数据流.发送方和接收方的成对的两个socket之间必须建立连接,当一个socket(通常都是server socket)等待建立连接时,另一个socket可以要求进行连接,一旦这两个socket连接起来,它们就可以进行双向数据传输,双方都可以进行发送或接收操作. TCP的

C#版 Socket编程(最简单的Socket通信功能)

原文://http://blog.csdn.net/linybo/article/details/51141960 示例程序是同步套接字程序,功能很简单,只是客户端发给服务器一条信息,服务器向客户端返回一条信息:这里只是一个简单的示例,是一个最基本的socket编程流程,在接下来的文章中,会依次记录套接字的同步和异步,以及它们的区别. 第一步:用指定的端口号和服务器的ip建立一个EndPoint对像: 第二步:建立一个Socket对像: 第三步:用socket对像的Bind()方法绑定EndPo

Swift和C混合Socket编程实现简单的ping命令

这个是用Mac下的Network Utility工具实现ping命令,用Wireshark抓取的ICMP数据包: 发送ICMP数据包内容 接受ICMP数据包内容 一.icmp结构 要真正了解ping命令实现原理,就要了解ping命令所使用到的TCP/IP协议.ICMP(Internet Control Message,网际控制报文协议)是为网关和目标主机而提供的一种差错控制机制,使它们在遇到差错时能把错误报告给报文源发方.ICMP协议是IP层的 一个协议,但是由于差错报告在发送给报文源发方时可能

socket编程——一个简单的例子(转)

原文地址:http://blog.csdn.net/wind19/article/details/6156339 从一个简单的使用TCP例子开始socket编程,其基本步骤如下: server                                                  client +++++++                                          ++++++++ 创建socket                               

网络编程----------SOCKET编程实现简单的TCP协议

首先我们需要大致了解TCP的几点知识: 1.TCP的特点:面向连接的可靠性传输 2.TCP的三次握手建立连接和四次挥手释放连接,但为什么TCP要三次握手建立连接呢? 答:因为两次握手无法保证可靠性,若最后一次失败,则客户端又会重新发起建立连接的请求,那么必然会消耗资源,而三次握手明显能够达到这个目的. 3.TCP为何是面向连接的? 答:因为TCP是传输层的协议,传输层的下层是网络层,IP协议就是网络层的协议,但是IP只提供尽力而为的的传输机制:而传输层的上层为应用层,它负责将下层的数据拿出来,所

socket编程(一):简单回射C/S程序

服务端代码: //echoSvr.c #include <unistd.h> #include <sys/types.h> #include <sys/socket.h> #include <netinet/in.h> #include <arpa/inet.h> #include <stdlib.h> #include <stdio.h> #include <errno.h> #include <str