我的程序是个小demo。服务器端只接受,客户端只发送。
服务器端:ServerSocket ss = null;
try{
ss = new ServerSocket(2222);
while(true){
Socket socket = ss.accept();
BufferedReader reader = new BufferedReader(new InputStreamReader(socket.getInputStream()));
System.out.println("客户端说:"+reader.readLine());
}
}catch (Exception e) {
e.printStackTrace();
}finally{
try{
if(ss!=null)
ss.close();
}catch (Exception e) {
}
}客户端:Socket socket = null;
try{
socket = new Socket("127.0.0.1", 2222);
System.out.println("连接已建立");
BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));
while(true){
writer.write("我是客户端..\\r\\n");
writer.flush();
Thread.sleep(3000);
System.out.println("发送完毕...");
}
}catch (Exception e) {
e.printStackTrace();
}finally{
try {
if(socket!=null)
socket.close();
} catch (IOException e) {
}
}问题是,如果客户端只发一次(就是没有while循环),服务器端是可以收到的,但是如果这样循环发的话,服务器端一次都没有收到。我的debug发现是服务器端一直阻塞在readLine,也就是说客户端发送的东西并没有到达服务器端。但是客户端确实显示循环的"发送完毕"。
服务器端:ServerSocket ss = null;
try{
ss = new ServerSocket(2222);
while(true){
Socket socket = ss.accept();
BufferedReader reader = new BufferedReader(new InputStreamReader(socket.getInputStream()));
System.out.println("客户端说:"+reader.readLine());
}
}catch (Exception e) {
e.printStackTrace();
}finally{
try{
if(ss!=null)
ss.close();
}catch (Exception e) {
}
}客户端:Socket socket = null;
try{
socket = new Socket("127.0.0.1", 2222);
System.out.println("连接已建立");
BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));
while(true){
writer.write("我是客户端..\\r\\n");
writer.flush();
Thread.sleep(3000);
System.out.println("发送完毕...");
}
}catch (Exception e) {
e.printStackTrace();
}finally{
try {
if(socket!=null)
socket.close();
} catch (IOException e) {
}
}问题是,如果客户端只发一次(就是没有while循环),服务器端是可以收到的,但是如果这样循环发的话,服务器端一次都没有收到。我的debug发现是服务器端一直阻塞在readLine,也就是说客户端发送的东西并没有到达服务器端。但是客户端确实显示循环的"发送完毕"。
解决方案 »
- java 多个tif打包成PDF
- Swing组件中,如何用一个BUTTON弹出一个新窗口?
- 我的MYECLIPSE里怎么没有STRUTS框架?
- JAVA 调用linux系统命令创建用户密码的问题!
- 如何往数据库读取和存储二进制文件?
- 事件监听,求助大虾了!
- 原来用jdbc访问mysql实现的程序,现在改用sybase数据库,源程序需要多大变动?——谢谢!
- 互斥的存/取款线程设计,为什么运行一直没有想要的结果?
- 这样的日期格式"2002-09-08",能否被Calendar类直接使用,从而得到这个特定日期的一些信息??
- 运行时候一直报错,我实在不知道该怎么改了,求各位大神相助!
- 如何学习JAVA容器?
- 新手请教类继承问题
import java.io.*;
import java.util.*;
public class Server {
public static void main(String[] args){
ServerSocket ss = null;
try{
ss = new ServerSocket(2222);
while(true){
Socket socket = ss.accept();
ObjectInputStream input = new ObjectInputStream(socket.getInputStream());
System.out.print("客户端说:"+(String)input.readObject());
input.close();
}
}catch (Exception e) {
e.printStackTrace();
}finally{
try{
if(ss!=null)
ss.close();
}catch (Exception e) {
}
}
}}
import java.util.*;
public class Client {
public static void main(String[] args){
Socket socket = null;
try{
while(true){
socket = new Socket("127.0.0.1", 2222);
System.out.println("连接已建立");
ObjectOutputStream writer = new ObjectOutputStream(socket.getOutputStream());
writer.writeObject("我是客户端..\\r\\n");
writer.flush();
Thread.sleep(1000);
System.out.println("发送完毕...");
}
}catch (Exception e) {
e.printStackTrace();
}finally{
try {
if(socket!=null)
socket.close();
} catch (IOException e) {
}
}
}}
ss = new ServerSocket(1212);
Socket socket = ss.accept();//放在外面
while (true) {
BufferedReader reader = new BufferedReader(
new InputStreamReader(socket.getInputStream()));
System.out.println("客户端说:" + reader.readLine());
}while (true) {
writer.write("我是客户端..\\r\\n");
writer.newLine();//加上这个:写入一个行分隔符
writer.flush();
Thread.sleep(3000);
System.out.println("发送完毕...");
}
可以到达你的想法了。
客户端循环发是没问题的,
客户端循环接有问题,因为你每一次循环完后都要accept接受客户端连接...所以尽管你发了那么多,服务器只是一直在等待socket的连接
一、如果服务端要循环获取客户端发送的数据需要循环执行readline()
二、客户端writer.write("我是客户端..\\r\\n"); 直接写\r\n即可
服务端:import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.ServerSocket;
import java.net.Socket;public class TestServer { public static void main(String[] args) {
ServerSocket ss = null;
try {
ss = new ServerSocket(2222);
while (true) {
Socket socket = ss.accept();
BufferedReader reader = new BufferedReader(
new InputStreamReader(socket.getInputStream())); String line = reader.readLine();
while (line != null) {
System.out.println("客户端说:" + line);
line = reader.readLine();
}
socket.close();
}
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
if (ss != null)
ss.close();
} catch (Exception e) {
}
}
}}客户端:import java.io.BufferedWriter;
import java.io.IOException;
import java.io.OutputStreamWriter;
import java.net.Socket;public class TestClient {
public static void main(String[] args) {
Socket socket = null;
try {
socket = new Socket("127.0.0.1", 2222);
System.out.println("连接已建立");
BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(
socket.getOutputStream()));
int count = 1;
while (count < 10) {
writer.write("我是客户端..\r\n");
writer.flush();
Thread.sleep(3000);
count++;
}
System.out.println("发送完毕...");
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
if (socket != null)
socket.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}}