Socket 一对多通信
服务器(TCPServer.java):
package visec;
import java.net.*;
import java.io.*; public class TCPServer{
public static void main(String[] args) throws Exception{
ServerSocket ss = new ServerSocket(5566); //创建一个Socket服务器,监听1001端口
System.out.println("1001端口开启~~");
int i=0;
//利用死循环不停的监听端口
while(true){
Socket s = ss.accept();//利用Socket服务器的accept()方法获取客户端Socket对象。
i++;
System.out.println("第" + i +"个客户端成功连接!");
Client c = new Client(i,s); //创建客户端处理线程对象
Thread t =new Thread(c); //创建客户端处理线程
t.start(); //启动线程
}
}
}
//客户端处理线程类(实现Runnable接口)
class Client implements Runnable{
int clientIndex = 0; //保存客户端id
Socket s = null; //保存客户端Socket对象 Client(int i,Socket s){
clientIndex = i;
this.s = s;
}
public void run(){
//打印出客户端数据
try{
DataInputStream dis = new DataInputStream(s.getInputStream());
System.out.println("第" + clientIndex + "个客户端发出消息:" + dis.readUTF());
dis.close();
s.close();
}
catch(Exception e)
{}
}
}
客户端(TCPClient.java):
package visec;
import java.net.*;
import java.io.*; public class TCPClient{
public static void main(String[] args) throws Exception{
Socket s = new Socket("192.168.0.129",5566); //创建一个Socket对象,连接IP地址为192.168.0.129的服务器的5566端口
DataOutputStream dos = new DataOutputStream(s.getOutputStream()); //获取Socket对象的输出流,并且在外边包一层DataOutputStream管道,方便输出数据
Thread.sleep((int)(Math.random()*200)); //让客户端不定时向服务器发送消息
dos.writeUTF("客户端消息--Msg"); //DataOutputStream对象的writeUTF()方法可以输出数据,并且支持中文
dos.flush(); //确保所有数据都已经输出
dos.close(); //关闭输出流
s.close(); //关闭Socket连接
}
}
Socket 一对多通信的更多相关文章
- 使用TCP/IP的套接字(Socket)进行通信
http://www.cnblogs.com/mengdd/archive/2013/03/10/2952616.html 使用TCP/IP的套接字(Socket)进行通信 套接字Socket的引入 ...
- java socket实现全双工通信
java socket实现全双工通信 单工.半双工和全双工的定义 如果在通信过程的任意时刻,信息只能由一方A传到另一方B,则称为单工. 如果在任意时刻,信息既可由A传到B,又能由B传A,但只能由一个方 ...
- Java 网络编程(五) 使用TCP/IP的套接字(Socket)进行通信
链接地址:http://www.cnblogs.com/mengdd/archive/2013/03/10/2952616.html 使用TCP/IP的套接字(Socket)进行通信 套接字Socke ...
- linux c使用socket进行http 通信,并接收任意大小的http响应(四)
终于说到SOCKET 这里了.SOCKET进行http通信的实际就是利用socket将http请求信息发送给http服务器,然后再利用socket接收http响应. 由于本文与之通信的服务器是ip已知 ...
- linux c使用socket进行http 通信,并接收任意大小的http响应(三)
使用socket进行http通信的时候,浏览器返回的响应经常不是固定长度的,有时候很大,有些时候又非常小,十分讨厌.如果仅仅只是为了接收一小段信息,设置一个十分大的缓存,这样又会十分浪费.而且经常更改 ...
- socket上http协议应用(使用socket进行http通信的例子,准备好报头以后,简单read/write就可以了)
前几天看socket本有点晕, 好不容易弄明白了,才发现公司服务器用的是http的. 找了好久也没发现linux下直接用http的api, 不过今日偶然发现了使用socket进行http通信的例子, ...
- Flex Socket与Java通信实例说明(转)
Flex Socket与Java通信实例说明(转) 这两天一直在flex的Socket ,现在终于懂了很多.由浅到深一步一步深入.慢慢体会实例,虽然实例都是在网上找的,但也经过了我的测试.我比较喜欢注 ...
- Python网络编程02 /基于TCP、UDP协议的socket简单的通信、字符串转bytes类型
Python网络编程02 /基于TCP.UDP协议的socket简单的通信.字符串转bytes类型 目录 Python网络编程02 /基于TCP.UDP协议的socket简单的通信.字符串转bytes ...
- 网络编程: 基于TCP协议的socket, 实现一对一, 一对多通信
TCP协议 面向连接 可靠的 面向字节流形式的 tcp是基于链接的,必须先启动服务端,然后再启动客户端去链接服务端 TCP协议编码流程: 服务器端: 客户端 实例化对 ...
随机推荐
- VS2013添加NuGet的方法
1.工具->扩展和更新->联机 2.右上角搜索框搜索NuGet,选择NuGet Package Manager for Visual Studio 2013,安装后重启VS 下面通过添加N ...
- c#高效比对大量图片
比较图片的方法 以前传统的比较方式是遍历图片中的每一个像素,然后进行比对.这样的比对在少量图片的比对上虽然效率低一点,但是也没有什么不好.但是在大量图片比对的时候,过长的反应时间和对服务器比较高的消耗 ...
- 第 2章 数组和 ArrayLists
数组是最通用的数据结构,它出现在几乎所有的编程语言里.在 C#语言中使用数组包括创建 System.Array 类型的数组对象,以及创建针对所有数组的抽象的基类型.Array 类提供了一套方法,这些方 ...
- Data Mover Script Templates
Datamover is probably the best way to export and import data between PeopleSoft databases and the sc ...
- Dynamic Web Project创建及版本修改的问题
java项目中,若切换服务器,经常会涉及到动态web模块版本的问题. 比如:新建了web项目,开始使用tomcat服务器,但是后来使用jboss服务器,就会出现:Project facet ...
- php抓取post方式提交的页面
function curlBy($url, $data=array()) { $ch = curl_init(); if(!empty($data)){ ...
- mysql 语句其它及优化
将检索到的数据保存到文件 Select * into outfile ‘文件地址’ from tabname; 生成的文件以制表符区分字段,以换行符区分记录 为满足特殊需求会采用不同的分割方式. 支 ...
- ERROR 1045 (28000): Access denied for user root@localhost (using password:
错误描述: Mysql中添加用户之后可能出现登录时提示ERROR 1045 (28000): Access denied for user的错误.删除user.user中值为NULL的,或更新NULL ...
- ios 文件操作
1.常见的NSFileManager文件方法 -(NSData *)contentsAtPath:path //从一个文件读取数据 -(BOOL)createFileAtPath: path cont ...
- 重命名Oracle数据库的表空间(Renaming a Tablespace)
重命名一个表空间时,Oracle会在数据字典.控制文件和数据文件的头部更新这个表空间名. 注意,重命名一个表空间不会重命名相关联的数据文件. 重命名代码示例如下: SQL> alter tabl ...