自己写了一个多线程的socket,没有条件多台机器测试,哪位大侠给我测试一下能通过不,谢谢//服务器端的
import java.io.*;
import java.net.*;public class MyServer implements Runnable {
static Socket client; Thread trd = null; MyServer() {
trd = new Thread(this);
trd.start(); } public void run() {
try {
BufferedReader in = new BufferedReader(new InputStreamReader(client
.getInputStream()));
PrintWriter out = new PrintWriter(client.getOutputStream()); while (true) {
String str = in.readLine();
System.out.println(str);
out.println("has receive....");
out.flush();
if (str.equals("end"))
break;
} } catch (IOException e) {
}
} public static void main(String[] args) throws IOException {
ServerSocket server = new ServerSocket(9999);
while (true) {
client = server.accept();
new MyServer();
client.close();
}
}
}
//客户端
import java.io.*;
import java.net.*;
public class Client1
{
Socket socket;
BufferedReader in;
PrintWriter out;public Client1()
{try{
socket = new Socket("192.168.0.4", 9999);//服务器端的IP地址和要使用的端口号
in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
out = new PrintWriter(socket.getOutputStream(),true);
BufferedReader line = new BufferedReader(new InputStreamReader(System.in));
out.println(line.readLine());
line.close();
out.close();
in.close();
socket.close();
}
catch (IOException e){}}
public static void main(String[] args)
{new Client1();}}
import java.io.*;
import java.net.*;public class MyServer implements Runnable {
static Socket client; Thread trd = null; MyServer() {
trd = new Thread(this);
trd.start(); } public void run() {
try {
BufferedReader in = new BufferedReader(new InputStreamReader(client
.getInputStream()));
PrintWriter out = new PrintWriter(client.getOutputStream()); while (true) {
String str = in.readLine();
System.out.println(str);
out.println("has receive....");
out.flush();
if (str.equals("end"))
break;
} } catch (IOException e) {
}
} public static void main(String[] args) throws IOException {
ServerSocket server = new ServerSocket(9999);
while (true) {
client = server.accept();
new MyServer();
client.close();
}
}
}
//客户端
import java.io.*;
import java.net.*;
public class Client1
{
Socket socket;
BufferedReader in;
PrintWriter out;public Client1()
{try{
socket = new Socket("192.168.0.4", 9999);//服务器端的IP地址和要使用的端口号
in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
out = new PrintWriter(socket.getOutputStream(),true);
BufferedReader line = new BufferedReader(new InputStreamReader(System.in));
out.println(line.readLine());
line.close();
out.close();
in.close();
socket.close();
}
catch (IOException e){}}
public static void main(String[] args)
{new Client1();}}
socket = new Socket("192.168.0.4", 9999);不对
socket = new Socket("localhost", 9999);也不对输入都没反映啊,我用了下面这个一台客户端的(单线程的),两台机器测试通过了的
import java.io.*;
import java.net.*;public class MyServer {
public static void main(String[] args) throws IOException{
ServerSocket server=new ServerSocket(4566);
while(true){
Socket client=server.accept();
BufferedReader in=new BufferedReader(new InputStreamReader(client.getInputStream()));
PrintWriter out=new PrintWriter(client.getOutputStream());
while(true){
String str=in.readLine();
System.out.println(str);
out.println("has receive....");
out.flush();
if(str.equals("end"))
break;
}
client.close();}} }
import java.net.*;/**
* @author April
*/
public class ICKSocket
{
private int i_serInPort = 5050; // input port of server
private int i_serOutPort = 5051; // output port of server private ServerSocket sInSocket; // input server socket
private ServerSocket sOutSocket; // output server socket public ICKSocket()
{
// TODO initializes server socket
try
{
// create server socket for input
sInSocket = new ServerSocket(i_serInPort);
// create server socket for output
sOutSocket = new ServerSocket(i_serOutPort);
}
catch (IOException e)
{
e.printStackTrace();
}
} /**
* Get server input socket
* @return sInSocket
*/
public ServerSocket getInSocket()
{
return sInSocket;
} /**
* Get server output socket
* @return sOutSocket
*/
public ServerSocket getOutSocket()
{
return sOutSocket;
} /**
* Set server in socket
* @param socket
*/
public void setInSocket(ServerSocket socket)
{
sInSocket = socket;
} /**
* Set server out socket
* @param socket
*/
public void setOutSocket(ServerSocket socket)
{
sOutSocket = socket;
}
}
/**
* @author April
*/
public class MainThreadSocket extends Thread
{
private Socket cInSocket = null; // input socket
private Socket cOutSocket = null; // output socket private ICKSocket ickSocket; // server socket
private ClientThreadSocket clientThreadSocket; private boolean mainThreadState = false; /**
* @param writeLog
*/
public MainThreadSocket()
{
ickSocket = new ICKSocket(); // createDb = new CreateDatabase();
// createTab = new CreateUserContactTable();
} /**
* Run main thread, synchronized subthread. When receive a request, create a ClientThreadSocket
* to manager it.
*/
public void run()
{
while (mainThreadState)
{
try
{
synchronized (this)
{
// monitor input and create socket
cInSocket = ickSocket.getInSocket().accept();
// monitor output and create socket
cOutSocket = ickSocket.getOutSocket().accept(); // create a subthread to answer client
clientThreadSocket = new ClientThreadSocket(this);
clientThreadSocket.start();
}
}
catch (IOException e)
{
e.printStackTrace();
}
}
}
}
* ClientSocket.java This class create a socket to connect the server and user can user this socket
* in other request to do their action. It contents the server's port, server's IP, the reader
* receive message from server and the writer to write message to server.
*/package server;import java.net.*;
import java.io.*;/**
* @author April
*/
public class ClientSocket
{
private int i_serInPort = 5050; // in port of server
private int i_serOutPort = 5051; // out port of server
private String serIP = "219.221.112.134"; private static Socket inSocket = null; // input socket of client
private static Socket outSocket = null; // output socket of client private static BufferedReader reader = null; // client input stream
private static PrintStream writer = null; // client output stream private static boolean serState = false; public ClientSocket()
{
// TODO create socket, reader and writer to commute information with server
try
{
inSocket = new Socket(serIP, i_serOutPort);
outSocket = new Socket(serIP, i_serInPort);
writer = new PrintStream(outSocket.getOutputStream());
reader = new BufferedReader(new InputStreamReader(inSocket.getInputStream())); serState = true;
}
catch (UnknownHostException e)
{
e.printStackTrace();
serState = false;
}
catch (IOException e)
{
e.printStackTrace();
serState = false;
}
} /**
* Get client in socket
* @return insocket
*/
public static Socket getInSocket()
{
return inSocket;
} /**
* Get client out socket
* @return outsocket
*/
public static Socket getOutSocket()
{
return outSocket;
} /**
* Get reader which read information from server
* @return reader
*/
public static BufferedReader getReader()
{
return reader;
} /**
* Get writer which write information to server
* @return writer
*/
public static PrintStream getWriter()
{
return writer;
} /**
* Get server state
* @return true server is ok
* @return false server is closed
*/
public static boolean getServerState()
{
return serState;
}
}/**
* ReadThread.java This class create thread to deal with server's information. If receive
* information from server, judge what's the content of this information and turn to correspond
* refresh function.
*/package server;import java.io.BufferedReader;
import java.io.IOException;
import mainWin.MainFrame;/**
* @author April
*/
public class ReadThread extends Thread
{
private String receiveMsg = null;
private BufferedReader reader = null;
public static boolean userExit = true; public ReadThread(MainFrame main)
{
reader = ClientSocket.getSocket().getReader();
} public void run()
{
while (!userExit)
{
try
{
receiveMsg = reader.readLine();
}
catch (IOException e)
{
e.printStackTrace();
} if (!receiveMsg.equals(null))
{
// something you want to do
}
else
{}
}
}
}