流读取的问题。
第一个例子(这个例子,说明我的这个读取方法没错)
package com.shengsiyuan.network.e3;
import java.io.InputStream;
import java.net.ServerSocket;
import java.net.Socket;
/**
* 监听端
*/
public class ServerTest1
{
private static ServerSocket serverSocket;
public static void main(String[] args) throws Exception
{
serverSocket = new ServerSocket(5000);
Socket socket = serverSocket.accept();
InputStream is = socket.getInputStream();
byte[] buffer = new byte[200];
int length = 0;
String string = null;
while (-1 != (length = is.read(buffer, 0, buffer.length)))
{
string = new String(buffer, 0, length);
}
is.close();
socket.close();
serverSocket.close();
System.out.println(string);
}
}
package com.shengsiyuan.network.e3;
import java.io.OutputStream;
import java.net.Socket;
/**
* 发送字符串welcome
*/
public class ClientTest1
{
public static void main(String[] args) throws Exception
{
Socket socket = new Socket("localhost", 5000);
OutputStream os=socket.getOutputStream();
os.write("welcome".getBytes());
os.close();
socket.close();
}
}
package com.shengsiyuan.network.e2;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;
public class MainServer
{
private static ServerSocket serverSocket;
public static void main(String[] args) throws Exception
{
serverSocket = new ServerSocket(4000);
while (true)
{
Socket socket = serverSocket.accept();
// 启动读写线程
new ServerInputThread(socket).start();
new ServerOutputThread(socket).start();
}
}
}
class ServerInputThread extends Thread
{
private Socket socket;
public ServerInputThread(Socket socket)
{
this.socket = socket;
}
@Override
public void run()
{
try
{
InputStream is = socket.getInputStream();
while (true)
{
byte[] buffer = new byte[1024];
int length = is.read(buffer);
String str = new String(buffer, 0, length);
System.out.println(str);
// 不知道为什么这样读行不通
// byte[] buffer = new byte[1024];
// int length = 0;
// String str = null;
// while (-1 != (length = is.read(buffer, 0, buffer.length)))
// {
// str = new String(buffer, 0, length);
// }
// System.out.println(str);
}
}
catch (IOException e)
{
e.printStackTrace();
}
}
}
class ServerOutputThread extends Thread
{
private Socket socket;
public ServerOutputThread(Socket socket)
{
this.socket = socket;
}
@Override
public void run()
{
try
{
OutputStream os = socket.getOutputStream();
while (true)
{
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
String line = reader.readLine();
os.write(line.getBytes());
}
}
catch (IOException e)
{
e.printStackTrace();
}
}
}
package com.shengsiyuan.network.e2;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.net.Socket;
public class MainClient
{
public static void main(String[] args) throws Exception
{
Socket socket = new Socket("localhost", 4000);
new ClientInputThread(socket).start();
new ClientOutputThread(socket).start();
}
}
class ClientOutputThread extends Thread
{
private Socket socket;
public ClientOutputThread(Socket socket)
{
this.socket = socket;
}
@Override
public void run()
{
try
{
OutputStream os = socket.getOutputStream();
boolean flag = true;
while (flag)
{
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
String line = reader.readLine();
os.write(line.getBytes());
if ("false".equals(line))
{
flag = false;
}
}
}
catch (IOException e)
{
e.printStackTrace();
}
}
}
class ClientInputThread extends Thread
{
private Socket socket;
public ClientInputThread(Socket socket)
{
this.socket = socket;
}
@Override
public void run()
{
try
{
InputStream is = socket.getInputStream();
boolean flag = true;
while (flag)
{
byte[] buffer = new byte[1024];
int length = is.read(buffer);
String str = new String(buffer, 0, length);
System.out.println(str);
if ("false".equals(str))
{
flag = false;
}
}
}
catch (IOException e)
{
e.printStackTrace();
}
}
}