现在的问题是,每次启动客户端,只能收发一次数据,第二次客户端就连接不上服务端了。我的主要的代码如下:
//Server.java
import java.io.*;
import java.net.*;
public class Server
{
public static void main(String[] args) throws IOException
{
ServerSocket serverSocket = null;
try
{
serverSocket = new ServerSocket(9624);
}
catch (IOException e)
{
System.err.println("打开端口发生错误.");
System.exit(1);
}
while(true)
{
new MultiServerThread(serverSocket.accept()).start();
}
serverSocket.close();
}
}
//MultiServerThread.java
import java.lang.*;
import java.net.*;
import java.io.*;
public class MultiServerThread extends Thread
{
private Socket socket = null;
public MultiServerThread(Socket socket)
{
super("MultiServerThread");
this.socket = socket;
}
public void run()
{
try
{
PrintWriter out = null;
BufferedInputStream in = null;
out = new PrintWriter(socket.getOutputStream(), true);
in = new BufferedInputStream(socket.getInputStream());
byte[] buf = new byte[255];
int bytes_read = 0;
bytes_read = in.read(buf);
DataProcess dataProcess = new DataProcess(buf,bytes_read);
out.print("FLZSCS");
out.flush();
out.close();
in.close();
socket.close();
}
catch (IOException e) {}
}
}
//Server.java
import java.io.*;
import java.net.*;
public class Server
{
public static void main(String[] args) throws IOException
{
ServerSocket serverSocket = null;
try
{
serverSocket = new ServerSocket(9624);
}
catch (IOException e)
{
System.err.println("打开端口发生错误.");
System.exit(1);
}
while(true)
{
new MultiServerThread(serverSocket.accept()).start();
}
serverSocket.close();
}
}
//MultiServerThread.java
import java.lang.*;
import java.net.*;
import java.io.*;
public class MultiServerThread extends Thread
{
private Socket socket = null;
public MultiServerThread(Socket socket)
{
super("MultiServerThread");
this.socket = socket;
}
public void run()
{
try
{
PrintWriter out = null;
BufferedInputStream in = null;
out = new PrintWriter(socket.getOutputStream(), true);
in = new BufferedInputStream(socket.getInputStream());
byte[] buf = new byte[255];
int bytes_read = 0;
bytes_read = in.read(buf);
DataProcess dataProcess = new DataProcess(buf,bytes_read);
out.print("FLZSCS");
out.flush();
out.close();
in.close();
socket.close();
}
catch (IOException e) {}
}
}
1. 用try{}catch(){}finally{},确保释放
2. while(true){...},应注意Sleep
3. run() 出现异常给隐藏起来了,应该有提示
4. 读取数据应使用 while(){...},否则可能出现截断读取错误
//Server.java
import java.io.*;
import java.net.*;
public class Server
{
public static void main(String[] args) throws IOException
{
ServerSocket serverSocket = null;
try
{
serverSocket = new ServerSocket(9624);
}
catch (IOException e)
{
System.err.println("打开端口发生错误.");
System.exit(1);
}
while(true)
{
new MultiServerThread(serverSocket.accept()).start();
}
//serverSocket.close();
}
}//MultiServerThread.java
import java.lang.*;
import java.net.*;
import java.io.*;
public class MultiServerThread extends Thread
{
private Socket socket = null;
public MultiServerThread(Socket socket)
{
super("MultiServerThread");
this.socket = socket;
}
public void run()
{
try
{
PrintWriter out = null;
BufferedInputStream in = null;
out = new PrintWriter(socket.getOutputStream(), true);
in = new BufferedInputStream(socket.getInputStream());
byte[] buf = new byte[255];
int bytes_read = 0;
bytes_read = in.read(buf);
// 添加
System.out.println(new String(buf));
//DataProcess dataProcess = new DataProcess(buf,bytes_read);
out.print("FLZSCS");
out.flush();
out.close();
in.close();
socket.close();
}
catch (IOException e) {}
}
}// Client.java
import java.io.*;
import java.net.*;
public class Client
{
public static void main(String[] args) throws IOException
{
Socket clientSocket = null;
int nCount = 0;
try
{
while(true)
{
clientSocket = new Socket(InetAddress.getLocalHost(),9624);
BufferedReader br = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));
PrintWriter pw = new PrintWriter(clientSocket.getOutputStream(), true);
pw.println("Hello nCount=" + nCount);
String strLine = br.readLine();
System.out.println(strLine);
clientSocket.close();
if ((++nCount) % 5 == 0) break;
}
}
catch (IOException e)
{
System.err.println("打开端口发生错误.");
System.exit(1);
}
}
}运行:
F:\>java Server
Hello nCount=0
Hello nCount=1
Hello nCount=2
Hello nCount=3
Hello nCount=4
F:\>startF:\>java Client
FLZSCS
FLZSCS
FLZSCS
FLZSCS
FLZSCS
小弟刚学,让老大见笑了 to:yuzl32(Hello!有酒醉)
我测试了下,用你写的client.java测试没有问题,我自己写的测试程序测试,服务端也没问题。可是用GPRS客户端连接还是一样,只能连接一次,在GPRS端显示的是无法连接,客户端是用c写的,应该没有问题,因为我用厂家提供的一个测试程序,测试很正常。问题应该出现在服务端的代码上,谢谢两位。
TinyJimmy(Jimmy) 大哥,你说的这些问题,2和4我都做了,好象没效果,1我不是很懂能更具体点吗?
1. 用try{}catch(){}finally{},确保释放
2. while(true){...},应注意Sleep
3. run() 出现异常给隐藏起来了,应该有提示
4. 读取数据应使用 while(){...},否则可能出现截断读取错误