67,550
社区成员




public class Client implements Runnable{
private static Socket s;
private Socket getInstance(){
if(s==null){
try {
return s=new Socket("127.0.0.1",8000);
} catch (UnknownHostException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
return s;
}
public void sendMsg() {
while(true){
try {
run();
Thread.sleep(3000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
@Override
public void run() {
System.out.println("come into run");
try {
Socket c = getInstance();
OutputStream ops =c.getOutputStream();
ops.write(new byte[]{0000});
ops.flush();
} catch (UnknownHostException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException ex) {
// TODO Auto-generated catch block
ex.printStackTrace();
}
}
public static void main(String[] args) {
Client c = new Client();
c.sendMsg();
}
}
public class Server {
private ServerSocket serverSocket;
public Server(){
try {
serverSocket = new ServerSocket();
serverSocket.bind(new InetSocketAddress(8000));
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println("服务启动");
}
public void service() {
while (true) {
Socket s = null;
try {
s = serverSocket.accept();
System.out.println("come a new request~ "+s.getInetAddress()+":"+s.getPort());
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} finally {
if(s!=null)
try {
s.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
Server server = new Server();
server.service();
}
}
serverSocket.accept();//这一行会被阻塞
看一下accept的介绍,注意红色部分:
Listens for a connection to be made to this socket and accepts it. The method blocks until a connection is made.
它说这个方法在新的连接到来之前会一直被阻塞。
而在客户端你写的方法:
private Socket getInstance(){}
这个方法保证了只会建立一次连接。
也就是说客户端在第一次连接建立之后没有新的连接了,而服务端的死循环里接收到第一次连接并打印之后马上又去傻傻的等待第二次连接了,它肯定是等不到的,So……import java.io.IOException;
import java.io.OutputStream;
import java.net.Socket;
public class Client implements Runnable
{
private static Socket s;
private Socket getInstance()
{
if (s == null)
{
try
{
return s = new Socket("127.0.0.1", 8000);
}
catch (IOException e)
{
e.printStackTrace();
}
}
return s;
}
@Override
public void run()
{
while (true)
{
try
{
System.out.println("come into run");
Socket c = getInstance();
OutputStream ops = c.getOutputStream();
ops.write(new byte[]
{
0000
});
ops.flush();
Thread.sleep(3000);
}
catch (Exception e)
{
e.printStackTrace();
}
}
}
public static void main(String[] args)
{
Client c = new Client();
new Thread(c).start();
}
}
InputStream is = s.getInputStream();
BufferedReader buf = new BufferedReader(new InputStreamReader(is));
String str = null;
while(null != (str = buf.readLine()))
{
System.out.println("come a new request~ " + s.getInetAddress()
+ ":" + s.getPort() + str + new SimpleDateFormat("mm:ss").format(new Date()));
}
而我是这样写的:
s = serverSocket.accept();
System.out.println("come a new request~ "+s.getInetAddress()+":"+s.getPort());
难道我这样写有问题吗?一直没想通import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.InetSocketAddress;
import java.net.ServerSocket;
import java.net.Socket;
import java.text.SimpleDateFormat;
import java.util.Date;
public class Server implements Runnable
{
private ServerSocket serverSocket;
private Socket s;
public Server()
{
try
{
serverSocket = new ServerSocket();
serverSocket.bind(new InetSocketAddress(8000));
s = serverSocket.accept();
}
catch (IOException e)
{
e.printStackTrace();
}
System.out.println("服务启动");
}
public void run()
{
while (true)
{
try
{
InputStream is = s.getInputStream();
BufferedReader buf = new BufferedReader(new InputStreamReader(is));
String str = null;
while(null != (str = buf.readLine()))
{
System.out.println("come a new request~ " + s.getInetAddress()
+ ":" + s.getPort() + str + new SimpleDateFormat("mm:ss").format(new Date()));
}
}
catch (IOException e)
{
e.printStackTrace();
}
}
}
public static void main(String[] args)
{
Server server = new Server();
new Thread(server).start();
}
}
import java.io.IOException;
import java.io.OutputStream;
import java.net.Socket;
import java.text.SimpleDateFormat;
import java.util.Date;
public class Client implements Runnable
{
private static Socket s;
private Socket getInstance()
{
if (s == null)
{
System.out.println("nullllllllllll");
try
{
return s = new Socket("127.0.0.1", 8000);
}
catch (IOException e)
{
e.printStackTrace();
}
}
return s;
}
public void run()
{
while (true)
{
try
{
String d = new SimpleDateFormat("mm:ss").format(new Date()) + System.getProperty("line.separator");
System.out.println("come into run" + d);
Socket c = getInstance();
OutputStream ops = c.getOutputStream();
ops.write(d.getBytes());
ops.flush();
Thread.sleep(3000);
}
catch (Exception e)
{
e.printStackTrace();
}
}
}
public static void main(String[] args)
{
Client c = new Client();
new Thread(c).start();
}
}
import java.io.DataInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.InetSocketAddress;
import java.net.ServerSocket;
import java.net.Socket;
public class Server implements Runnable
{
private ServerSocket serverSocket;
private Socket s;
public Server()
{
try
{
serverSocket = new ServerSocket();
serverSocket.bind(new InetSocketAddress(8000));
}
catch (IOException e)
{
e.printStackTrace();
}
System.out.println("服务启动");
}
public void run()
{
while (true)
{
try
{
if(null == s)
s = serverSocket.accept();
InputStream is = s.getInputStream();
DataInputStream dis = new DataInputStream(is);
String str = null;
while(null != (str = dis.readUTF()))
{
System.out.println("come a new request~ " + s.getInetAddress()
+ ":" + s.getPort() + str);
}
}
catch (IOException e)
{
e.printStackTrace();
}
}
}
public static void main(String[] args)
{
Server server = new Server();
new Thread(server).start();
}
}