Multi-Client TCP Server /w Swing GUI
Hi everybody,
i have to develop a Multi-Client TCP Server with a Swing GUI. The GUI mainly consists of a JTable which shows various trace messages from processes running on other computers. As the data needs to be filtered i�m using a custom TableModel derived from AbstractTableModel. I�m creating a new thread for every client that connects as shown in http://java.sun.com/developer/onlineTraining/Programming/BasicJava2/socket.html
Now every client thread reads data from its TCP connection and puts it into the JTable by calling the method addRow of the model. But i�m getting strange NullPointerExceptions and IndexOutOfBoundExceptions when data arrives (i�m using ArrayList in the model). These exceptions never show in a single-threaded Swing app (i�ve tested this already, so i don�t think it�s a bug in my model), so i think this is a problem with Swing�s thread unsafety? Do you have any hints on how to get away with it? Also general design tips for a Multi-Client TCP Server /w Swing GUI are greatly appreciated.
Thanks in advance!
Best regards,
Disposable_Hero
Of course, but i don�t think it is the model (as said before it works fine in a single thread swing app)
Here�s the code:
public class LogTableModel extends AbstractTableModel{
private Vector dataVector;
private Vector filterVector;
private String[] columnIdentifiers;
private Vector filteredbyProcess;
private Vector filteredbyLoglevel;
private boolean bEnableRefresh;
/** Creates a new instance of LogTableModel */
public LogTableModel() {
dataVector=new Vector(0);
columnIdentifiers=new String[]{"LogTime","HostName","IP","ProcessName","LogLevel","Handle","PID","TID","LogData"};
filteredbyProcess=new Vector(0);
filteredbyLoglevel=new Vector(0);
filterVector=new Vector(0);
bEnableRefresh=true;
public synchronized void enableRefresh(boolean bEnableRefresh){
this.bEnableRefresh=bEnableRefresh;
if(bEnableRefresh){
this.buildIndexListBasedOnFilter();
public synchronized void addRow(LogLine row){
dataVector.add(row);
if(bEnableRefresh)
this.buildIndexListBasedOnFilter();
public synchronized void addFilter(Filter filter){
filterVector.add(filter);
if(filter.isActive())
this.buildIndexListBasedOnFilter();
public synchronized void setFilterActive(String name,boolean active){
int i;
for(i=0;i<filterVector.size();i++)
if(((Filter)filterVector.elementAt(i)).getName().equals(name))
break;
Filter tmp=(Filter)filterVector.elementAt(i);
tmp.setActive(active);
if(active)
this.buildIndexListBasedOnFilter();
public synchronized void setFilterLoglevel(String name,int Loglevel){
int i;
for(i=0;i<filterVector.size();i++)
if(((Filter)filterVector.elementAt(i)).getName().equals(name))
break;
Filter tmp=(Filter)filterVector.elementAt(i);
tmp.setLoglevel(Loglevel);
if(tmp.isActive()==false)
this.buildIndexListBasedOnFilter();
private void buildIndexListBasedOnFilter(){
filteredbyProcess.clear();
filteredbyLoglevel.clear();
applyProcessFilter();
applyLoglevelFilter();
if(bEnableRefresh)
this.fireTableDataChanged();
private void applyProcessFilter(){
LogLine line=null;
Filter filter=null;
for(int i=0;i<dataVector.size();i++){
for(int j=0;j<filterVector.size();j++){
filter=(Filter)filterVector.elementAt(j);
line=(LogLine)dataVector.elementAt(i);
if(filter.isActive()&&(filter.getName().equals(line.getProcessName()))){
line.setHidden(true);
break;
else{
line.setHidden(false);
if(line.getHidden()!=true)
filteredbyProcess.add(new Integer(i));
private void applyLoglevelFilter(){
for(int i=0;i<filteredbyProcess.size();i++){
int index=((Integer)filteredbyProcess.get(i)).intValue();
LogLine line=(LogLine)dataVector.elementAt(index);
for(int j=0;j<filterVector.size();j++){
if(((Filter)filterVector.elementAt(j)).getName().equals(line.getProcessName())){
Filter filter=(Filter)filterVector.elementAt(j);
if((filter.getLoglevel()&line.getLogLevelAsInt())!=line.getLogLevelAsInt())
line.setHidden(true);
else
filteredbyLoglevel.add(new Integer(index));
break;
public synchronized String getColumnName(int columnIndex){
return columnIdentifiers[columnIndex];
public synchronized void clearData(){
dataVector.clear();
filteredbyProcess.clear();
filteredbyLoglevel.clear();
public synchronized int getColumnCount() {
return columnIdentifiers.length;
public synchronized int getRowCount() {
return filteredbyLoglevel.size();
public synchronized Object getValueAt(int rowIndex, int columnIndex) {
int iIndex=((Integer)filteredbyLoglevel.get(rowIndex)).intValue();// hier krachts warum???
LogLine tmp=(LogLine)dataVector.elementAt(iIndex);
switch(columnIndex){
case 0:
return tmp.getLogTime();
case 1:
return tmp.getHostName();
case 2:
return tmp.getIP();
case 3:
return tmp.getProcessName();
case 4:
return tmp.getLogLevel();
case 5:
return tmp.getHandle();
case 6:
return tmp.getProcessID();
case 7:
return tmp.getThreadID();
case 8:
return tmp.getLogData();
default:
return null;
Similar Messages
-
Conneting Tcp Server from swing
Hello Techies,
I have to connect TCP server from swing. I had developed GUI. Now I have to connect TCP server from swing.
Here question araise where I have to give information about the server details.
Can any body guide me??
Thanks,
Ramupresently I can say I am having 2 combo boxes, 1 text field and one submit button.
When i click on submit i have to connect the TCP server and get the reply.
How can I do this one.
regards,
ramu. -
Need help in setting up a Multi Client chat server.
I've been stuck at this problem longer than I should be, and it's starting to get to me.
In my quest to learn more about networking in Java, I've decided to start with a simple multi client chat program. The problem is that I don't know exactly how to go about setting it up.
I can't think of any way for multiple threads to be able to send data to the central server so that can then be sent to every other client, and also be able to request data and have it sent back just to the client that requested it.
I think part of my problem might be that my knowledge of threads is somewhat limited, and that I might be overlooking or over complicating something.If you're trying to develop webapplications then I'm not too sure if SunONE 6.1 is the best platform considering that its support for jsp, servlets and the likes is rather outdated. Personally I'd look into http://www.sun.com/download/products.xml?id=446518d5 (Java webserver 7 rc3) if you wish to continue using a webserver with integrated java container.
Otherwise you might benefit more from https://glassfish.dev.java.net (project glassfish), which is naturally also included in the http://java.sun.com/javaee (Java EE5).
Just my 2 cents. -
Connecting TCP server from swing
Hello Techies,
From swing application i am trying to connect TCP server. I am able to connect TCP server.
But I am having problem in action Performed().
Until i close the Jpanel , the request is not going to the TCP server.
In my Jpanel, I am having 2 combo boxes, One text field and one button.
when i click the button this request has to be sent to the TCP server.
How can i do this one??
can any body help me.
Thanks (In advance),
RamuNo body is having answer??
-
Hello all,
I'm really looking for best practices on multi-client UDP or TCP servers. In reading the java tutorials, it seems like the way to go for multi-client TCP servers is a threaded application, with threads for each client connection. I haven't found out what one would do for a multi-client UDP application....
Anyways, I was hoping you might be able to point me to some tutorials/online learning resources that deal in design/best-practices.Hello all,
I'm really looking for best practices on multi-client UDP or TCP servers. In reading the java tutorials, it seems like the way to go for multi-client TCP servers is a threaded application, with threads for each client connection. I haven't found out what one would do for a multi-client UDP application....
Anyways, I was hoping you might be able to point me to some tutorials/online learning resources that deal in design/best-practices. -
My Tcp/ip multi-client server is not passing the data string into the flatten to string vi
I am using labview Multi-connection cleint and server to build my own multi-client server connection.
The problem i am having is that the data does not get through the flatten to string vi. Would anyone be kind enough to tell me why is that happening? and what I do to fix it.
Attached code . My goal is to send data to the client via tcp/ip and use the data to perform certain task.
Thanks a whole lot
Attachments:
multiconnection-server.vi 39 KB
multiconnection-client.vi 21 KBInstead, I decided to upload the code and recent mods I have made to it .
see attached
Attachments:
multiconnection-clienttest.vi 43 KB
multiconnection-servertest.vi 21 KB -
Hi,
As the name of the forum suggests I am very new to this whole thing.
I am trying to write a client/server socket program that can encrypt and decrypt and has a GUI, can't use JCE or SSL or any built in encryption tools.
I have the code for everything cept the encryption part.
Any help, greatly appreciated,tnks a million but how do i incorporate that into the following client and server code:
here's the client code:
import java.awt.Color;
import java.awt.BorderLayout;
import java.awt.event.*;
import javax.swing.*;
import java.io.*;
import java.net.*;
class SocketClient extends JFrame
implements ActionListener {
JLabel text, clicked;
JButton button;
JPanel panel;
JTextField textField;
Socket socket = null;
PrintWriter out = null;
BufferedReader in = null;
SocketClient(){ //Begin Constructor
text = new JLabel("Text to send over socket:");
textField = new JTextField(20);
button = new JButton("Click Me");
button.addActionListener(this);
panel = new JPanel();
panel.setLayout(new BorderLayout());
panel.setBackground(Color.white);
getContentPane().add(panel);
panel.add("North", text);
panel.add("Center", textField);
panel.add("South", button);
} //End Constructor
public void actionPerformed(ActionEvent event){
Object source = event.getSource();
if(source == button){
//Send data over socket
String text = textField.getText();
out.println(text);
textField.setText(new String(""));
//Receive text from server
try{
String line = in.readLine();
System.out.println("Text received :" + line);
} catch (IOException e){
System.out.println("Read failed");
System.exit(1);
public void listenSocket(){
//Create socket connection
try{
socket = new Socket("HUGHESAN", 4444);
out = new PrintWriter(socket.getOutputStream(), true);
in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
} catch (UnknownHostException e) {
System.out.println("Unknown host: HUGHESAN.eng");
System.exit(1);
} catch (IOException e) {
System.out.println("No I/O");
System.exit(1);
public static void main(String[] args){
SocketClient frame = new SocketClient();
frame.setTitle("Client Program");
WindowListener l = new WindowAdapter() {
public void windowClosing(WindowEvent e) {
System.exit(0);
frame.addWindowListener(l);
frame.pack();
frame.setVisible(true);
frame.listenSocket();
SERVER Code
import java.awt.Color;
import java.awt.BorderLayout;
import java.awt.event.*;
import javax.swing.*;
import java.io.*;
import java.net.*;
class SocketServer extends JFrame
implements ActionListener {
JButton button;
JLabel label = new JLabel("Text received over socket:");
JPanel panel;
JTextArea textArea = new JTextArea();
ServerSocket server = null;
Socket client = null;
BufferedReader in = null;
PrintWriter out = null;
String line;
SocketServer(){ //Begin Constructor
button = new JButton("Click Me");
button.addActionListener(this);
panel = new JPanel();
panel.setLayout(new BorderLayout());
panel.setBackground(Color.white);
getContentPane().add(panel);
panel.add("North", label);
panel.add("Center", textArea);
panel.add("South", button);
} //End Constructor
public void actionPerformed(ActionEvent event) {
Object source = event.getSource();
if(source == button){
textArea.setText(line);
public void listenSocket(){
try{
server = new ServerSocket(4444);
} catch (IOException e) {
System.out.println("Could not listen on port 4444");
System.exit(-1);
try{
client = server.accept();
} catch (IOException e) {
System.out.println("Accept failed: 4444");
System.exit(-1);
try{
in = new BufferedReader(new InputStreamReader(client.getInputStream()));
out = new PrintWriter(client.getOutputStream(), true);
} catch (IOException e) {
System.out.println("Accept failed: 4444");
System.exit(-1);
while(true){
try{
line = in.readLine();
//Send data back to client
out.println(line);
} catch (IOException e) {
System.out.println("Read failed");
System.exit(-1);
protected void finalize(){
//Clean up
try{
in.close();
out.close();
server.close();
} catch (IOException e) {
System.out.println("Could not close.");
System.exit(-1);
public static void main(String[] args){
SocketServer frame = new SocketServer();
frame.setTitle("Server Program");
WindowListener l = new WindowAdapter() {
public void windowClosing(WindowEvent e) {
System.exit(0);
frame.addWindowListener(l);
frame.pack();
frame.setVisible(true);
frame.listenSocket();
Again help on this is very welcomed -
OSX: multi client server app with NSNetService
hello
i have a small osx server app
that uses NSNetService to manage connection and set up streams
but it seems to stop advertising as soon as a clients connects
how can i make it multiclient so it keeps advertising and when a new client connects uses the same streams ?
thanks in advance
nonnussuperdeportivo wrote:
Hello fellahs, as the title of this post says I'm making a client and server application. The server are supposed to handel several clients, and the communication is done true UDP. Out of interest why have you chosen UDP rather than TCP?
I have got two questions concerning this. The first one is if a exception is throws in the server should I then send the exception back to the client in serialized form. If I choose to do this then I also would need to handel the exception classen to the client. Or should I send back a regular IOException and use it's init cause to define the exception which occured in the server. That is up to you, you can do either. I would do the first option.
The second question is concerning the multi client support. If this is going to work then I would need to time-out the connection i the server environment, and I have not a clue about how long it should be?It should be long enough that you don't timeout a valid connection. There is no simple answer to this. -
Handle Received data of Multiple TCP clients on TCP Server by displaying them into Datagrid
Hello All,
I have developed a C# based TCP server GUI application which is accepting the data from multiple TCP clients on TCP server.
The data i am receiving from TCP clients is a 32 bit data. In my application multiple TCP client data goes like this:
00012331100025123000124510321562
01112563110002512456012451032125 and so on...
Now i want those data of the TCP clients to be parsed into 4 bits first and display it in 8 columns (32/4=8) of (say) datagrid as each 4 bit represents some characteristics of the TCP client. The same thing
should work for next TCP client on second row of datagrid.
Can you give me some suggestion or an example how to go about this? Any help would be appreciated.
Thank you in advance.
Here is my code for receiving data from multiple TCP clients.
void m_Terminal_MessageRecived(Socket socket, byte[] buffer)
string message = ConvertBytesToString(buffer, buffer.Length);
PublishMessage(listMessages, string.Format("Sockets: {0}", message));
// Send Echo
// m_ServerTerminal.DistributeMessage(buffer);
private string ConvertBytesToString(byte[] bytes, int iRx)
char[] chars = new char[iRx + 1];
System.Text.Decoder d = System.Text.Encoding.UTF8.GetDecoder();
d.GetChars(bytes, 0, iRx, chars, 0);
string szData = new string(chars);
return szData;Now i want those data of the TCP clients to be parsed into 4 bits first and display it in 8 columns (32/4=8) of (say) datagrid as each 4 bit represents some characteristics of the TCP client. The same thing
should work for next TCP client on second row of datagrid
If mean it's a Windows Forms application and you want to display those bits in a DataGridView control, then please see these threads:
Add row to datagridview
Programmatically add new row to DataGridView
We are trying to better understand customer views on social support experience, so your participation in this interview project would be greatly appreciated if you have time. Thanks for helping make community forums a great place.
Click
HERE to participate the survey. -
How to call ejb from a Swing gui application client?
Hi Everyone,
I am new to EJB and I have question for calling an ejb from a Swing GUI application client. Can anyone give me an example of how my Swing GUI can call an EJB from a SUN ONE Application Server. If anyone can give me some insight, I appreciate it.I have looked up various sources and just can't get it to work. I know I have to use the lookup() method, but I have also seen lookups using IIOP://servename......
Context ctx = getInitialContext();
DemoHome dhome = (DemoHome)ctx.lookup("demo.DemoHome");
or
Context ctx = getInitialContext();
DemoHome dhome = (DemoHome)ctx.lookup(java:comp/......)
so can anyone tell what is the difference between using iiop://servername..... as the lookup string and java:comp/......
and if using java:comp/ what does this mean? Does it mean that lookup() method is looking for the ejb somewhere in this directory. I would really appreciate if someone can give an example of a Swing GUI calling a ejb from an application server and how the code is actually doing the lookup in and what are each steps it goes through.
Thanks -
Hello. I would like to write async tcp client and server. I wrote this code but a have a problem, when I call the disconnect method on client or stop method on server. I can't identify that the client or the server is no longer connected.
I thought I will get an exception if the client or the server is not available but this is not happening.
private async void Process()
try
while (true)
var data = await this.Receive();
this.NewMessage.SafeInvoke(Encoding.ASCII.GetString(data));
catch (Exception exception)
How can I determine that the client or the server is no longer available?
Server
public class Server
private readonly Dictionary<IPEndPoint, TcpClient> clients = new Dictionary<IPEndPoint, TcpClient>();
private readonly List<CancellationTokenSource> cancellationTokens = new List<CancellationTokenSource>();
private TcpListener tcpListener;
private bool isStarted;
public event Action<string> NewMessage;
public async Task Start(int port)
this.tcpListener = TcpListener.Create(port);
this.tcpListener.Start();
this.isStarted = true;
while (this.isStarted)
var tcpClient = await this.tcpListener.AcceptTcpClientAsync();
var cts = new CancellationTokenSource();
this.cancellationTokens.Add(cts);
await Task.Factory.StartNew(() => this.Process(cts.Token, tcpClient), cts.Token, TaskCreationOptions.LongRunning, TaskScheduler.Default);
public void Stop()
this.isStarted = false;
foreach (var cancellationTokenSource in this.cancellationTokens)
cancellationTokenSource.Cancel();
foreach (var tcpClient in this.clients.Values)
tcpClient.GetStream().Close();
tcpClient.Close();
this.clients.Clear();
public async Task SendMessage(string message, IPEndPoint endPoint)
try
var tcpClient = this.clients[endPoint];
await this.Send(tcpClient.GetStream(), Encoding.ASCII.GetBytes(message));
catch (Exception exception)
private async Task Process(CancellationToken cancellationToken, TcpClient tcpClient)
try
var stream = tcpClient.GetStream();
this.clients.Add((IPEndPoint)tcpClient.Client.RemoteEndPoint, tcpClient);
while (!cancellationToken.IsCancellationRequested)
var data = await this.Receive(stream);
this.NewMessage.SafeInvoke(Encoding.ASCII.GetString(data));
catch (Exception exception)
private async Task Send(NetworkStream stream, byte[] buf)
await stream.WriteAsync(BitConverter.GetBytes(buf.Length), 0, 4);
await stream.WriteAsync(buf, 0, buf.Length);
private async Task<byte[]> Receive(NetworkStream stream)
var lengthBytes = new byte[4];
await stream.ReadAsync(lengthBytes, 0, 4);
var length = BitConverter.ToInt32(lengthBytes, 0);
var buf = new byte[length];
await stream.ReadAsync(buf, 0, buf.Length);
return buf;
Client
public class Client
private TcpClient tcpClient;
private NetworkStream stream;
public event Action<string> NewMessage;
public async void Connect(string host, int port)
try
this.tcpClient = new TcpClient();
await this.tcpClient.ConnectAsync(host, port);
this.stream = this.tcpClient.GetStream();
this.Process();
catch (Exception exception)
public void Disconnect()
try
this.stream.Close();
this.tcpClient.Close();
catch (Exception exception)
public async void SendMessage(string message)
try
await this.Send(Encoding.ASCII.GetBytes(message));
catch (Exception exception)
private async void Process()
try
while (true)
var data = await this.Receive();
this.NewMessage.SafeInvoke(Encoding.ASCII.GetString(data));
catch (Exception exception)
private async Task Send(byte[] buf)
await this.stream.WriteAsync(BitConverter.GetBytes(buf.Length), 0, 4);
await this.stream.WriteAsync(buf, 0, buf.Length);
private async Task<byte[]> Receive()
var lengthBytes = new byte[4];
await this.stream.ReadAsync(lengthBytes, 0, 4);
var length = BitConverter.ToInt32(lengthBytes, 0);
var buf = new byte[length];
await this.stream.ReadAsync(buf, 0, buf.Length);
return buf;Hi,
Have you debug these two applications? Does it go into the catch exception block when you close the client or the server?
According to my test, it will throw an exception when the client or the server is closed, just log the exception message in the catch block and then you'll get it:
private async void Process()
try
while (true)
var data = await this.Receive();
this.NewMessage.Invoke(Encoding.ASCII.GetString(data));
catch (Exception exception)
Console.WriteLine(exception.Message);
Unable to read data from the transport connection: An existing connection was forcibly closed by the remote host.
By the way, I don't know what the SafeInvoke method is, it may be an extension method, right? I used Invoke instead to test it.
We are trying to better understand customer views on social support experience, so your participation in this interview project would be greatly appreciated if you have time. Thanks for helping make community forums a great place.
Click
HERE to participate the survey. -
How can I make a TCP server for muticonnec​tion clients??
Dear group,
I try to change a complicated TCP server with only one client posibility to
a multiclient.
I've seen the examples, even some solution on the ni web, but I don't
understand very well how it's works. I need also logging for each client in
a different file.
Thanks for your help.The best example I have found is this one
Understanding Client-Server Applications -- Example Code
There are a couple of good links to tutorials off the page as well.
If you have questions about the specific example let us know what they are. -
TCP SERVER labview CLIENT not labview
Hi
I maked a little TCP server with labview like the example with little modification (I read data from serial port...)
If I use client build with labview I launche client and I read every time data until clint disconnect, if I use a client not build in labview I read only one time not in continue (server doens't write after the first time also if client is connect)
Can you help me?
best regards
elisa
Attachments:
Multiple Connections - Servercon Seriale.vi 161 KBHI,
Can you explain in detail how you modify your program.
Can you post your working program for both server and client.
Hopefully, get a reply from you.
Thank you,
Hussin -
RE: vb client - forte server
Have you thought about tagging a Forte Service Object as an OLE object and
using that OLE object in VB?
-----Original Message-----
From: Adupa Praveen Kumar [mailto:[email protected]]
Sent: Tuesday, June 30, 1998 11:51 AM
To: [email protected]
Subject: vb client - forte server
Hi friends,
how can i user forte service object services in vb client application.
thanks,
Praveen
Goldstone Softech Ltd.
India.
Get Your Private, Free Email at http://www.hotmail.com
To unsubscribe, email '[email protected]' with
'unsubscribe forte-users' as the body of the message.
Searchable thread archive <URL:http://pinehurst.sageit.com/listarchive/>
To unsubscribe, email '[email protected]' with
'unsubscribe forte-users' as the body of the message.
Searchable thread archive <URL:http://pinehurst.sageit.com/listarchive/>The point is you are bound to do VB.Net for web services and it is not VB at all.
The syntax surely resembles VB but wait till you see what you have instead of good old PRINT!
VB.Net is not a continuation of VB, it is something radically different that you will have to learn. And if I had to choose between learning VB.Net and Java/Swing, I would go for the latter. I think the third choice, C#, is definitely the winner on all aspects of programming on the Windows platform. The GUI building gap is not as wide as it was with Visual C++ and VB, in fact, it is almost non-existant: .Net's Windows-forms can be developed rapidly either with C# or VB.Net; basically you get the same tool to develop GUIs.
All things said, there is an excellent article at http://www.theserverside.com/resources/article.jsp?l=SOAP-And-EJB discussing when to opt for SOAP in an EJB environement.
Hope it helps. -
Launching Swing GUI from Oracle Forms Web Based
Hi there,
I have oracle forms which call a shell script which initiates the java swing gui. I am using host command to run this script. When I am doing it on unix server everything works fine. Now we want same application on web now i am getting problem. The host command is not working in this case. It can not launch the java gui. Can anybody tell me what will be the nice approach to do it.
Thanks
RanjanHi,
you'll have to create a Java Bean in Forms that calls the runtime. You can also use webutil, available on otn to call a client side host command.
Frank
Maybe you are looking for
-
Blue screen error 0x0000006B windows 7 64bit
I have blue screen error code 0x0000006B PROCESS1_INITIALIZATION_FAILED on my vaio laptop. I tried safe mode and safe mode with command prompt and still doesnt work either. Someone help fix this issue please
-
Hello Guys, I hope someone has experienced this issue or just know a fix or work around for it. Roland will not be developing new patches or what have you for the fantom x series and I figured thats the reason my keyboard is not working with this new
-
What happened to nvl2(fdate, sysdate-fdate, sysdate)
Hi guys, Oracle 11.2 I just found this by chance: SQL> create table tab_0417(fid number, fdate date); Table created SQL> insert into tab_0417 values(1, date'2012-01-01'); 1 row inserted SQL> insert into tab_0417 values(1, NULL); 1 row inserted SQL> c
-
Connection verification failed for data source using mySQL
Hi, I having problem with mySQL datasource and getting the above error. This is only happening in our staging server. We are using ColdFusion 8 running JRUN4 and trying to connect to mySQL v 5.1.41. I tried adding DSN from my localhost using ColdFusi
-
I ask for a connector ligntning femal to 30B male
i ask for a connector ligntning femal to 30B male