import java.io.*;
import java.net.Socket;
import java.net.ServerSocket;
import java.net.SocketException;public class TestServer {
public static void main(String args[]) {
try {
ServerSocket s = new ServerSocket(8888);
Socket s1 = s.accept();
OutputStream os = s1.getOutputStream();
DataOutputStream dos = new DataOutputStream(os);
InputStream is = s1.getInputStream();
DataInputStream dis = new DataInputStream(is);
InputStreamReader isr = new InputStreamReader(System.in);
BufferedReader br = new BufferedReader(isr);String info;
while(true){
info = dis.readUTF();
if(info.equals("bye"))
break;
System.out.println("客户机: " + info);
info = br.readLine();
dos.writeUTF(info);
if(info.equals("bye"))
break;}
dis.close();
dos.close();
s1.close();
s.close();
}catch (SocketException e) {
System.out.println("网络连接异常,程序退出!");
}catch (IOException e) {
e.printStackTrace();
}
}
}客户端的是import java.io.*;
import java.net.Socket;
import java.net.SocketException;public class TestClient {
public static void main(String args[]) {
try {
Socket s1 = new Socket("localhost",8888);
InputStream is = s1.getInputStream();
DataInputStream dis = new DataInputStream(is);
OutputStream os = s1.getOutputStream();
DataOutputStream dos = new DataOutputStream(os);
InputStreamReader isr = new InputStreamReader(System.in);
BufferedReader br = new BufferedReader(isr);String info;
while(true){
info = br.readLine();
dos.writeUTF(info);
info = dis.readUTF();
System.out.println("服务器: " + info);
if(info.equals("bye"))
break;}
dis.close();
dos.close();
s1.close();
}catch (SocketException e) {
System.out.println("网络连接异常,程序退出!");
}catch (IOException e) {
e.printStackTrace();
}
}
}问题是连接好以后不管是在客户段还是在服务器只能写一句然后回车才有效果,如果你在客户端写两句就不行,但是我的想法是写N句服务器都可以收到,怎么办??
import java.net.Socket;
import java.net.ServerSocket;
import java.net.SocketException;public class TestServer {
public static void main(String args[]) {
try {
ServerSocket s = new ServerSocket(8888);
Socket s1 = s.accept();
OutputStream os = s1.getOutputStream();
DataOutputStream dos = new DataOutputStream(os);
InputStream is = s1.getInputStream();
DataInputStream dis = new DataInputStream(is);
InputStreamReader isr = new InputStreamReader(System.in);
BufferedReader br = new BufferedReader(isr);String info;
while(true){
info = dis.readUTF();
if(info.equals("bye"))
break;
System.out.println("客户机: " + info);
info = br.readLine();
dos.writeUTF(info);
if(info.equals("bye"))
break;}
dis.close();
dos.close();
s1.close();
s.close();
}catch (SocketException e) {
System.out.println("网络连接异常,程序退出!");
}catch (IOException e) {
e.printStackTrace();
}
}
}客户端的是import java.io.*;
import java.net.Socket;
import java.net.SocketException;public class TestClient {
public static void main(String args[]) {
try {
Socket s1 = new Socket("localhost",8888);
InputStream is = s1.getInputStream();
DataInputStream dis = new DataInputStream(is);
OutputStream os = s1.getOutputStream();
DataOutputStream dos = new DataOutputStream(os);
InputStreamReader isr = new InputStreamReader(System.in);
BufferedReader br = new BufferedReader(isr);String info;
while(true){
info = br.readLine();
dos.writeUTF(info);
info = dis.readUTF();
System.out.println("服务器: " + info);
if(info.equals("bye"))
break;}
dis.close();
dos.close();
s1.close();
}catch (SocketException e) {
System.out.println("网络连接异常,程序退出!");
}catch (IOException e) {
e.printStackTrace();
}
}
}问题是连接好以后不管是在客户段还是在服务器只能写一句然后回车才有效果,如果你在客户端写两句就不行,但是我的想法是写N句服务器都可以收到,怎么办??
while(true){
info = dis.readUTF();
if(info.equals("bye"))
break;
System.out.println("客户机: " + info);
info = br.readLine();
dos.writeUTF(info);
dos.flush();
if(info.equals("bye"))
break; }
客户端
while(true){
info = br.readLine();
dos.writeUTF(info);
dos.flush();
info = dis.readUTF();
System.out.println("服务器: " + info);
if(info.equals("bye"))
break; }
为什么都不喜欢加flush()呢,一小时之内看见好几个这样的了
import java.io.*;
import java.net.Socket;
import java.net.ServerSocket;
import java.net.SocketException;public class TestServer {
private DataOutputStream dos;
public TestServer() {
try {
ServerSocket s = new ServerSocket(8888);
Socket s1 = s.accept();
OutputStream os = s1.getOutputStream();
dos = new DataOutputStream(os);
InputStream is = s1.getInputStream();
DataInputStream dis = new DataInputStream(is);
InputStreamReader isr = new InputStreamReader(System.in);
BufferedReader br = new BufferedReader(isr); new Thread(new WriteTo()).start();
String infor ;
while (true) {
infor = dis.readUTF();
System.out.println("客户端: " + infor);
if (infor.equals("bye"))
break; }
dis.close();
dos.close();
s1.close();
s.close();
} catch (SocketException e) {
System.out.println("网络连接异常,程序退出!");
} catch (IOException e) {
e.printStackTrace();
}
}
public static void main(String args[]) {
new TestServer();
}
private class WriteTo implements Runnable { private BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
private String infow;
public void run() {
try {
while(true) {
infow = br.readLine();
dos.writeUTF(infow);
}
} catch (IOException e) {
// TODO 自动生成 catch 块
e.printStackTrace();
}
}
}
}
客户端:import java.io.*;
import java.net.Socket;
import java.net.SocketException;public class TestClient {
private DataOutputStream dos;
public TestClient() {
try {
Socket s1 = new Socket("localhost", 8888);
InputStream is = s1.getInputStream();
DataInputStream dis = new DataInputStream(is);
OutputStream os = s1.getOutputStream();
dos = new DataOutputStream(os);
new Thread(new WriteTo()).start();
String infor;
while (true) {
infor = dis.readUTF();
System.out.println("服务器: " + infor);
if (infor.equals("bye"))
break; }
dis.close();
dos.close();
s1.close();
} catch (SocketException e) {
System.out.println("网络连接异常,程序退出!");
} catch (IOException e) {
e.printStackTrace();
}
}
public static void main(String args[]) {
new TestClient();
} private class WriteTo implements Runnable { private BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
private String infow;
public void run() {
try {
while(true) {
infow = br.readLine();
dos.writeUTF(infow);
}
} catch (IOException e) {
// TODO 自动生成 catch 块
e.printStackTrace();
}
}
}
}不知道是不是符合lz的要求?
InputStreamReader isr = new InputStreamReader(System.in);
BufferedReader br = new BufferedReader(isr);
忘了删除!!
import java.io.*;
import java.net.Socket;
import java.net.ServerSocket;
import java.net.SocketException; public class TestServer {
public static void main(String args[]) {
try {
ServerSocket s = new ServerSocket(8888);
Socket s1 = s.accept();
OutputStream os = s1.getOutputStream();
DataOutputStream dos = new DataOutputStream(os);
InputStream is = s1.getInputStream();
DataInputStream dis = new DataInputStream(is);
new MyThread(dos).start();
String info=null; while(true){
info = dis.readUTF();
if(info.equals("bye"))
break;
System.out.println("客户机: " + info);
}
dis.close();
dos.close();
s1.close();
s.close();
}catch (SocketException e) {
System.out.println("网络连接异常,程序退出!");
}catch (IOException e) {
e.printStackTrace();
}
}}
class MyThread extends Thread{
private String info=null;
private BufferedReader br;
private DataOutputStream dos;
public MyThread(DataOutputStream dos){
this.dos=dos;
InputStreamReader isr = new InputStreamReader(System.in);
br = new BufferedReader(isr);
}
@Override
public void run() {
try {
while(true){
info = br.readLine();
dos.writeUTF(info);
dos.flush();
}
} catch (IOException e) {
// TODO 自动生成 catch 块
e.printStackTrace();
}
}
}服务器端
import java.io.*;
import java.net.Socket;
import java.net.SocketException; public class TestClient {
public static void main(String args[]) {
try {
Socket s1 = new Socket("localhost",8888);
InputStream is = s1.getInputStream();
DataInputStream dis = new DataInputStream(is);
OutputStream os = s1.getOutputStream();
DataOutputStream dos = new DataOutputStream(os);
new MyThread1(dos).start();
String info;
while(true){ info = dis.readUTF();
System.out.println("服务器: " + info);
if(info.equals("bye"))
break; }
dis.close();
dos.close();
s1.close();
}catch (SocketException e) {
System.out.println("网络连接异常,程序退出!");
}catch (IOException e) {
e.printStackTrace();
}
}
}
class MyThread1 extends Thread{
private String info=null;
private BufferedReader br;
private DataOutputStream dos;
public MyThread1(DataOutputStream dos){
this.dos=dos;
InputStreamReader isr = new InputStreamReader(System.in);
br = new BufferedReader(isr);
}
@Override
public void run() {
try {
while(true){
info = br.readLine();
dos.writeUTF(info);
dos.flush();
}
} catch (IOException e) {
// TODO 自动生成 catch 块
e.printStackTrace();
}
}
}
用线程控制