- 浏览: 110095 次
- 性别:
- 来自: 成都
最近访客 更多访客>>
文章分类
最新评论
-
dev_liu:
lipengyu2006 写道现在怎么样儿了啊 房子多少钱买 ...
最近比较心烦 -
lipengyu2006:
现在怎么样儿了啊 房子多少钱买的。
最近比较心烦 -
cynan168:
...
hibernate数据查询的几种方式 -
My_Choice:
joram中文文档 -
My_Choice:
非常感谢,太有用了,中文文档不好找啊,而且是这么详细的
joram中文文档
public class Sendert {
QueueConnectionFactory queueConnectionFactory = null;
QueueConnection queueConnection = null;
QueueSession queueSession = null;
Queue queue = null;
QueueSender queueSender = null;
final String MSG_TEXT1 =
new String("Here is a client-acknowledge message 4tetrtretertert4t45ewrwerwrgergrt4rqwerew5t479347597505890 34535&%^*&$&^$^%$&%&*)_*)&^*%*^$&$^(*&(*&(*%*%&^%*%^%*&^*&^&*^*&^*&^");
final String MSG_TEXT2 =
new String("Here is a Message 327893475984 ryeirrfr9urtyureyt&&&&&&&)))__^&&&))gerg)%%^%^%^%&(*(*(*)*(**)(*)*)*)T^HJCJBDKJFBKJJDOAIWEU(Q&#(&E(*&#Q*E&QEUODIJEDLJLHDKGDUWTE&QE");
TextMessage message1 = null;
TextMessage message2 =null;
public Sendert() throws JMSException, NamingException {
javax.naming.Context ictx = new InitialContext(JMSConstant.getProp());
queueConnectionFactory = (QueueConnectionFactory) ictx.lookup("qcf");
queueConnection = queueConnectionFactory.createQueueConnection("user1",
"user1");
queueSession = queueConnection.createQueueSession(false,
Session.CLIENT_ACKNOWLEDGE);
queue = (Queue) ictx.lookup("queue");
ictx.close();
System.out.println(" SENDER: Created client-acknowledge session");
queueSender = queueSession.createSender(queue);
message1 = queueSession.createTextMessage();
message2 = queueSession.createTextMessage();
message1.setIntProperty("sessionID", 1);
message2.setIntProperty("sessionID", 2);
}
class AsynSender implements Runnable
{
public void run ()
{
try {
for(int i=0;i<10;i++){
message1.setText("i"+MSG_TEXT1);
message2.setText("i"+MSG_TEXT2);
System.out.println(" SENDER: Sending message: "
+ message1.getText()+i);
queueSender.send(message1);
queueSender.send(message2);
}
} catch (JMSException e) {
System.out.println("Exception occurred: " + e.toString());
}
// finally {
// if(queueSender!=null){
// try{queueSender.close();
//
// }catch(JMSException e){}
// if(queueSession!=null)
// {
// try{
// queueSession.commit();
// }catch(JMSException e){}
// }
// if (queueConnection != null)
// {
// try {
// queueConnection.close();
// } catch (JMSException e) {}
// }
// }
// }
}
}
public void run_threads() {
AsynSender tt = new AsynSender();
for (int i = 0; i < 5; i++)
{ new Thread(tt).start();
System.out.println("go");}
// try{
// tt.join();
//
// }catch(InterruptedException je){}
System.out.println("go2");
}
void close() throws JMSException {
queueSender.close();
queueSession.close();
queueConnection.close();
}
public static void main(String[] args) throws JMSException, NamingException {
int count=0;
Sendert se = new Sendert();
se.run_threads();
Thread tt=Thread.currentThread();
System.out.println("count==: "+tt.activeCount());
// tt.g
// System.out.println("tt==: "+tt);
// myLable:{
// count=tt.activeCount();
// }
// for(;;){
// break myLable;
// }
// while(true){
//
//
// if(tt.activeCount()==3)
// se.close();
// else break myLable;;}
// se.close();
System.out.println("count==: "+tt.activeCount());
}
}
说明.就是一个内部类,更好的封装了一个可以实现多线程的run方法..不过多线程有个问题..我无法知道子线程什么时候完毕,然后调用close()方法关闭所以对象...搞了几个小时,判断活动的线程,join().好象都不行.
评论
/**
*
*/
import java.io.IOException;
import java.util.ArrayList;
import java.util.Properties;
import java_cup.runtime.Symbol;
import javax.jms.JMSException;
import javax.jms.Queue;
import javax.jms.QueueConnection;
import javax.jms.QueueConnectionFactory;
import javax.jms.QueueSender;
import javax.jms.QueueSession;
import javax.jms.Session;
import javax.jms.TextMessage;
import javax.naming.Context;
import javax.naming.InitialContext;
import javax.naming.NamingException;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
/**
*
* @author Owner
*
*/
public class Sendert {
private static transient final Log log = LogFactory.getLog(Sendert.class);
QueueConnection queueConnection = null;
QueueSession queueSession = null;
QueueSender queueSender = null;
final String MSG_TEXT1 =
new String("Here is a client-acknowledge message 4tetrtretertert4t45ewrwerwrgergrt4rqwerew5t479347597505890 34535&%^*&$&^$^%$&%&*)_*)&^*%*^$&$^(*&(*&(*%*%&^%*%^%*&^*&^&*^*&^*&^");
final String MSG_TEXT2 =
new String("Here is a Message 327893475984 ryeirrfr9urtyureyt&&&&&&&)))__^&&&))gerg)%%^%^%^%&(*(*(*)*(**)(*)*)*)T^HJCJBDKJFBKJJDOAIWEU(Q&#(&E(*&#Q*E&QEUODIJEDLJLHDKGDUWTE&QE");
TextMessage message1 = null;
TextMessage message2 = null;
static long time1;
static long time4;
public Sendert() throws JMSException, NamingException {
time1 = System.currentTimeMillis();
// javax.naming.Context ictx = new InitialContext(JMSConstant.getProp());
/**
* 直接创建一个Properties,把jndi配置属性key,value放进去.可以省去读取jdni.properties的时间和大量代码.
*/
Properties pr =new Properties();
pr.put("82.0.176.214","16400");
javax.naming.Context ictx = new InitialContext(pr);
QueueConnectionFactory queueConnectionFactory = (QueueConnectionFactory) ictx.lookup("qcf");
queueConnection = queueConnectionFactory.createQueueConnection("user1","user1");
queueSession = queueConnection.createQueueSession(false,
Session.CLIENT_ACKNOWLEDGE);
Queue queue = (Queue) ictx.lookup("queue");
ictx.close();
queueSender = queueSession.createSender(queue);
message1 = queueSession.createTextMessage();
message2 = queueSession.createTextMessage();
message1.setIntProperty("sessionID", 1);
message2.setIntProperty("sessionID", 2);
}
class AsynSender extends Thread {
public void run () {
try {
for(int i=0;i<5;i++){
message1.setText("i"+MSG_TEXT1);
message2.setText("i"+MSG_TEXT2);
System.out.println(" message1: " + message1.getText());
System.out.println(" message2: " + message2.getText());
queueSender.send(message1);
queueSender.send(message2);
}
} catch (JMSException e) {
System.out.println("Exception occurred: " + e.toString());
}
}
}
/**
* 由于是多线程,无法控制每个线程同时完成,所以会发生没有发送消息完毕而关闭连接的情况
* 省去下面注释的代码.
*/
// finally {
// if(queueSender!=null){
// try{queueSender.close();
//
// }catch(JMSException e){}
// if(queueSession!=null)
// {
// try{
// queueSession.commit();
// }catch(JMSException e){}
// }
// if (queueConnection != null)
// {
// try {
// queueConnection.close();
// } catch (JMSException e) {}
// }
// }
// }
public void run_threads() {
AsynSender[] tt = new AsynSender[1000];
for (int i = 0; i < tt.length; i++)
{
tt[i] = new AsynSender();
tt[i].start();
// new Thread(tt).setPriority(Thread.MAX_PRIORITY);
// new Thread(tt).start();
log.info("run"+Thread.activeCount());
System.out.println("go");
}
for (int i = 0; i < tt.length; i++) {
System.out.println("go1");
try {
tt[i].join();//让子线程发送消息完毕后,才执行主控线程,关闭发送器,连接,会话对象
} catch (InterruptedException je) {}
System.out.println("go2");
}
}
/**
* 创建方法close()关闭消息发送器,会话,连接对象.
*
* @throws JMSException
*/
void close() throws JMSException {
queueSender.close();
queueSession.close();
queueConnection.close();
}
/**
*
* @param args
* @throws JMSException
* @throws NamingException
* @throws IOException
* 主控线程,当子线程发送消息完毕后.调用close()方法关闭消息发送器,会话,连接对象.
* 最后打印出发送消息的时间.和一些活动的线程测试.
*
*/
public static void main(String[] args) throws JMSException, NamingException, IOException {
System.out.println(" sender: Created client-acknowledge session");
Sendert se = new Sendert();
long time4 = System.currentTimeMillis();
se.run_threads();
System.out.println("count==: "+Thread.activeCount());
se.close();//发送消息完毕关闭消息发送器,会话,连接对象.
// System.out.println("tt==: "+tt);
// myLable:{
// count=tt.activeCount();
// }
// for(;;){
// break myLable;
// }
// while(true){
//
//
// if(tt.activeCount()==3)
// se.close();
// else break myLable;;}
// System.in.read();
// try{Thread.sleep(10000);
// }catch(InterruptedException e){};
long time = System.currentTimeMillis();
long time2= time-time1;
System.out.println("count==: "+Thread.activeCount());
System.out.println("time=:"+time);//当前时间
System.out.println("time1=:"+time1);//程序初始化时间
System.out.println("time2=:"+time2);//程序执行耗费时间
System.out.println("time4=:"+time4);//程序初始化耗费时间
log.info("time4="+(time4-time1));
System.out.println("count==: "+Thread.activeCount()); //当前线程活动数
}
}
相关推荐
比如客户端A向客户端B发送消息,服务器接收到客户端A发过来消息内容和客户端B信息之后,通过转发表查找到客户端B的Socket,将内容转发给客户端B,实现客户端之间的通信。 3.运行程序时先运行服务端,再运行客户端。 ...
2.通过在服务器端维护一张转发表来实现各个客户端之间的通信,比如客户端A要给客户端B发送消息,首先客户端A把消息内容和客户端B的信息发给服务器,服务器在转发表中找到与客户端B建立的Socket,然后将消息内容转发...
多线程通信,QT5.11.1,多线程TCP服务器,多线程连接客户端。QThread
用windows API实现的多线程服务器和客户端,客户端接受用户按键,发送数据给服务器,服务器随即进行响应
本人在学习到socket的时候开贴记录顺便练习一下,下面的代码能够实现搭建一个多台客户端电脑与服务器主机的连续对话。一、程序功能可以实现多台电脑互通消息,且利用多线程实现一台服务器与多台客户端的连续对话二、...
linux c网络编程 实现多线程下载服务器与客户端,可以实现类似迅雷的多个线程分块下载同一个文件/多个线程下载多个文件,大大增加下载速度
多线程实现服务器和客户端聊天.pdf
在QT网络编程中,服务器往往需要和多个客户端保持连接,因此,我在熟悉多线程编程过程中,在TCP服务每接收到一个客户端连接请求,就新建一个线程。客户端也是在新建的线程中维护的。 程序的思路如下: 程序使用了非...
c#语言开发多线程socket服务器端程序,实现一个服务器同时与多个客户端连接对话。
C++语言编写,SOCKET套接字通信,分服务器和客户端,多线程模型,Win32控制台。 首先聊天室分为服务端和客户端,通过TCP连接通信。运行顺序为: 1.首先打开服务服; 2.打开客户端,用户输入名字,连接到服务端后...
本文在上文的基础上重新实现支持多线程的服务器。 以下为TCP客户端的程序代码: #!/usr/bin/env python3 import sys from PyQt5.QtCore import (QByteArray, QDataStream, QDate, QIODevice, QRegExp, Qt) from ...
C#SOCKET 客户端与主机通讯多线程实现,先启动服务器再启动客户端
编写简单的HTTP 1.0客户端/服务器程序:.编写多线程Web服务器:编写简单的RMI程序 包含实验PPT 实验报告
学习Python网络通信的时候发现书上只有一个服务端对应一个客户端的情形,于是自己想自己动手实现一个服务端响应多个客户端。 首先建立服务器的socket来监听客户端的请求: tcpSerSock=socket(AF_INET,SOCK_STREAM) ...
利用c++实现的高性能多线程web服务器.zip利用c++实现的高性能多线程web服务器.zip利用c++实现的高性能多线程web服务器.zip利用c++实现的高性能多线程web服务器.zip利用c++实现的高性能多线程web服务器.zip利用c++...
最近接了一个单子,QT写的多线程Socket服务器+多客户端,虽然用qt做socket服务器不太合适,但是毕竟客户要求就做了,本以为很简单,后来才发现QT的QTcpServer真的不太好用,参考了好多网上的教程才弄明白,顺便记录...
服务器多线程多客户端程序。里面含有多个客户端与多线程的通信,和网上的那个有点区别,同时含有dictionary类的使用哦,我觉得很好用
服务器为每一个连接客户端产生一个线程,这样接受多个连接
多线程实现的一对多编程,使用Linux下的socket进行编程。
用Python套接字实现服务器和客户端的一对多通信,使用多线程库实现,可以把客户端程序传到另外一台电脑实现通信