異なるポート番号の異なるIPアドレスを持つ異なるシステムに接続されているソケットの数があります。私の質問は、一度にすべてのソケットを通信する任意のシステムで1つのプログラムを実行しなければならないと私はどのようにソケットからのメッセージを並行して取得できますか?Javaで複数のソケットを通信する方法は?
私はシングルソケットを使用していますが、正常に動作し、ハイパーターミナルからメッセージが連続的に取得されています。私は100個のソケットを持っている場合、最初の1から複数の接続、その後、私は取得しています応答は...そうできるだけ早く
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();
}
}
}
は、私は2つのソケットにその作業罰金のための2つのスレッドを実行しているソリューションを提供しますが、してくださいどうすればいいですか?私たちは、単一のソケットと通信することができ、このコードを使用することにより...スレッドの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
は例を提供してください... – pmad