我有不同的IP地址与不同的端口号连接到不同系统的套接字数量。我的问题是我必须在任何系统中运行一个程序来一次传送所有套接字,并且如何从套接字中并行传送消息?如何在java中通信多个套接字?
虽然我使用单个套接字,它将正常工作,我从超级终端不断地收到消息。不止一个连接,然后我得到的第一个反应只..所以请提供解决方案尽快
import java.io.BufferedReader;
import java.io.DataOutputStream;
import java.io.InputStreamReader;
import java.net.Socket;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.HashMap;
import com.ibatis.sqlmap.client.SqlMapClient;
public class Client1 extends Thread {
static Socket socket;
static Socket socket1;
static String DATE_FORMAT_NOW = "yyyy-MM-dd HH:mm:ss";
static SqlMapClient sqlMap=GetDBConnection.sqlMap;
static BufferedReader br = null;
static DataOutputStream dos=null;
static BufferedReader br1 = null;
static DataOutputStream dos1=null;
public static void main(String args[]){
try{
String host="192.168.1.151";
int port=5002;
String host1="192.168.1.150";
int port1=5001;
socket = new Socket(host, port);
socket1=new Socket(host1, port1);
dos = new DataOutputStream(socket.getOutputStream());
br = new BufferedReader(new InputStreamReader(socket.getInputStream()));
dos1 = new DataOutputStream(socket1.getOutputStream());
br1 = new BufferedReader(new InputStreamReader(socket1.getInputStream()));
Thread t = new Thread(new Runnable() {
public void run() {
while(socket.isConnected()) {
try{
HashMap map = new HashMap();
String str = br.readLine();
Calendar cal = Calendar.getInstance();
SimpleDateFormat sdf = new SimpleDateFormat(DATE_FORMAT_NOW);
String time = sdf.format(cal.getTime());
map.put("data", str);
map.put("port", socket.getPort());
map.put("date_time", time);
sqlMap.insert("insert", map);
}
catch(Exception e){
e.printStackTrace();
}
}
}
});
Thread t1 = new Thread(new Runnable() {
public void run() {
while(socket1.isConnected()) {
try{
HashMap map = new HashMap();
String str = br1.readLine();
Calendar cal = Calendar.getInstance();
SimpleDateFormat sdf = new SimpleDateFormat(DATE_FORMAT_NOW);
String time = sdf.format(cal.getTime());
map.put("data", str);
map.put("port", socket1.getPort());
map.put("date_time", time);
sqlMap.insert("insert", map);
}
catch(Exception e){
e.printStackTrace();
}
}
}
});
t.start();
t1.start();
}
catch(Exception e){
e.printStackTrace();
}
}
}
我运行两个线程的两个插槽的做工精细,但如果我有100座那我该怎么做呢?我无法创建线程100的...所以提供最佳解决方案..
public class Client implements Runnable{
public static final String DATE_FORMAT_NOW = "yyyy-MM-dd HH:mm:ss";
static BufferedReader br = null;
static DataOutputStream dos=null;
static Socket socket = null;
SqlMapClient sqlMap=GetDBConnection.sqlMap;
Client(String host, int port)
{
try {
socket = new Socket(host, port);
} catch (UnknownHostException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
public void run()
{
try {
HashMap map = new HashMap(5);
String str;
int prt=socket.getPort();
dos = new DataOutputStream(socket.getOutputStream());
br = new BufferedReader(new InputStreamReader(socket.getInputStream()));
while((str=br.readLine())!=null)
{
Calendar cal = Calendar.getInstance();
SimpleDateFormat sdf = new SimpleDateFormat(DATE_FORMAT_NOW);
String time = sdf.format(cal.getTime());
map.put("data", str);
map.put("port",prt);
map.put("date_time", time);
sqlMap.insert("insert", map);
}
}
catch(Exception e)
{
e.printStackTrace();
}
finally
{
try {
socket.close();
dos.close();
br.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
public static void main(String args[])
{
ResultSet rs=null;
Connection con = null;
try {
Class.forName("org.postgresql.Driver");
con = DriverManager.getConnection("jdbc:postgresql://localhost:5432/Socket","username","passwd");
Statement st=con.createStatement();
String vsql="select port, ip_addr from port_instrument";
rs=st.executeQuery(vsql);
while (rs.next()) {
String id = rs.getString(1);
String ipaddr = rs.getString(2);
new Thread(new Client(ipaddr, Integer.parseInt(id))).start();
}
}
catch(Exception e)
{
e.printStackTrace();
}
finally{
try {
con.close();
rs.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
}
通过使用此代码,我们可以只用单插槽通信。在我的数据库中,我有5个套接字,但最终我只从最后一个套接字(5)获得通信。
使用线程并行处理一个开始。 – Codemwnci 2011-01-05 09:28:02
可以请提供一个例子... – pmad 2011-01-05 09:52:40