socket编程 客户端与服务器之间传递消息

问题描述

socket编程 客户端与服务器之间传递消息

客户端向服务端发送一字符串,
BufferedWriter pw= new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));
pw.write("hello");
pw.flush();

在服务端获取:
BufferedReader br= new BufferedReader(new InputStreamReader(s.getInputStream()));
System.out.println(br.readLine());

    程序启动后,在服务端没有获取到字符串。

解决方案

socket详解

解决方案二:

看这段代码没有问题,检查下其他代码是否正确。这段是学习代码吧,不介意的话都贴出来让大家帮忙看看。

解决方案三:

下面是我的代码:

服务端:
import java.io.*;
import java.net.Socket;
import java.net.ServerSocket;
import java.util.Scanner;

public class Server extends Thread {
private ServerSocket ss;
private BufferedReader br ;

public void init()
{
    try {
        ss = new ServerSocket(10000);
    }
    catch (IOException e) {
        System.out.println("failed to start server");
    }
}

public void run()
{
    Scanner sc = new Scanner(System.in);
    while(true) {
        try {
            Socket s = null;
            s = ss.accept();
            br = new BufferedReader(new InputStreamReader(s.getInputStream()));
            System.out.println(br.readLine());
        } catch (Exception e) {
            //e.printStackTrace();
        }
    }
}
public static void main(String[] args) throws Exception {
    Server srv = new Server();
    srv.init();
    srv.start();
}

}

客户端:
import java.io.*;
import java.net.Socket;
import java.util.Scanner;

public class Client extends Thread{
private Socket socket;
private BufferedWriter pw;

public Socket getSocket() {
    return socket;
}

//向服务端发送数据
public void run(){
    boolean reConnect = false;
    connServer();
    Scanner sc = new Scanner(System.in);

        while (true) {
            try{
                socket.sendUrgentData(12);
            if (reConnect) {
                connServer();
                reConnect = false;
            }
        }catch(IOException e){
            System.out.println("reConnection...");
            reConnect = true;
            continue;
        }
            try {
                pw = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));
                pw.write("hello");
                pw.flush();
            } catch (IOException e) {
                e.printStackTrace();
            }
    }
}

//建立连接
public void connServer(){
    try {
        socket = new Socket("127.0.0.1", 10000);
    } catch (Exception e) {
        System.out.println("connection refused");
    }
}

public static void main(String[] args) {
    Client1 client1 = new Client1();
    //client1.connServer();  //连接服务端
    client1.start();
}

}

解决方案四:

这个你可以找本socket这方面的书箱研究研究

解决方案五:

猜测是pw没有关闭的原因

解决方案六:

使用netty,帮你封装了socket

解决方案七:

客户端传送数据给服务端,客户端应该是使用输入缓冲区吧

解决方案八:

测试了下你的代码,之所以没有打印hello是因为你写入流使用错误,在client的写入类用PrintWriter来发送请求数据的话就能在服务器端正确打印了。
还有就是你的socket.sendUrgentData(12);调用有问题,你在线程中循环往同一个socket中发送数据的话,只能发送大约12条左右,程序就进入异常分支了。
可以修改你的客户端代码如下:

 import java.io.*;
import java.net.Socket;
import java.util.Scanner;

public class Client extends Thread {
    private Socket socket;
    private PrintWriter pw;

    public Socket getSocket() {
        return socket;
    }

    // 向服务端发送数据
    public void run() {
        boolean reConnect = false;
        connServer();
        Scanner sc = new Scanner(System.in);

        while (true) {
            try {
                socket.sendUrgentData(12);
                if (reConnect) {
                    connServer();
                    reConnect = false;
                }
            } catch (IOException e) {
                System.out.println("reConnection...");
                e.printStackTrace();
                reConnect = true;
                continue;
            }
            try {
                pw = new PrintWriter(socket.getOutputStream());
                pw.write("hello");
                pw.flush();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }

    // 建立连接
    public void connServer() {
        try {
            socket = new Socket("127.0.0.1", 10000);
        } catch (Exception e) {
            System.out.println("connection refused");
        }
    }

    public static void main(String[] args) {
        Client client1 = new Client();
        // client1.connServer(); //连接服务端
        client1.start();
    }
}

这样服务器端就能正常打印hello了。但是由于你调用了socket.sendUrgentData(12);你的while循环发送一定数量的hello后,程序就进入异常了。
你的这段代码的意图是什么呢?为什么client端要用线程循环往同一个Socket中发送数据呢?为什么要调用sendUrgentData这个方法呢?

时间: 2024-10-31 19:44:00

socket编程 客户端与服务器之间传递消息的相关文章

Variable v1.2--在客户端和服务器之间传送变量

Variable是一个用于在客户端与服务器之间传递数据的控件.Variable v1.2对1.1做了以下改进: (1)实现了ICallbackEventHandler接口,支持在ASP.NET网页中不经过回发在客户端与服务器之间传递 数据: (2)增强了客户端VariableManager的功能: Variable v1.2 使用指南: 1.不经过回发在客户端与服务器之间传递数据 (1)在客户端发送回调将数据传送到服务器 在客户端发送回调将数据传送到服务器非常简单,只需创建一个回调函数并调用 V

windows socket编程客户端怎么使用recv函数接受服务器发送的大数据

问题描述 windows socket编程客户端怎么使用recv函数接受服务器发送的大数据 我写了个客户端接受服务器的数据,用recv接收,当缓冲区的大小小于发送的数据的大小后 要怎么处理recv函数,本人刚开始学习socket编程,还望大神们赐教啊!!!!! 解决方案 用while循环一直recv就可以了 解决方案二: 一直recv就可以了 解决方案三: 服务器和客户端两边的数据都安固定大小重复发送收取.可以把大小放小一些比较灵活,比如4096个字节

android-关于socket编程 客户端不能接受服务端信息问题

问题描述 关于socket编程 客户端不能接受服务端信息问题 private void send() { try { tvGetContent.append("我说:" + etSendContent.getText().toString() + "n"); writer.write(etSendContent.getText().toString() + "n"); writer.flush(); etSendContent.setText(&

线程-使用Java socket让客户端与服务器建立连接后,服务器如何判断来自客户端的各类请求

问题描述 使用Java socket让客户端与服务器建立连接后,服务器如何判断来自客户端的各类请求 初学java,目前写了一个服务端和一个客户端.大致了解了如何socket通信是如何操作的,并且初步实现了客户端和服务端的通信.也仅仅是是接受和返回简单的字符串.部分代码如下 public void run(){ try{ serverSocket=new ServerSocket(SERVER_PORT_ONE); System.out.println("serversocket已创建"

tcp/ip socket-TCP/IP客户端与服务器之间的通信问题。。急求解决方法!!!!!

问题描述 TCP/IP客户端与服务器之间的通信问题..急求解决方法!!!!! 在做一个项目,问题,客户端和服务器端可以都开两个线程.即客户端打开线程1和线程2,服务器端打开线程1和线程2.在通信过程中服务器线程1与客户端线程1通信,服务器线程2与客户端线程2通信,这样子怎么实现呢???急求 解决方案 你先搞懂socket怎么用,然后网上有很多socket的例子,有的很不错,自己研究一下 解决方案二: socket我已经了解过了,实现了多个客户端同时与服务器之间的通信,现在想做客户端开两个线程一个

msdos-socket-MSDOS下socket编程客户端 socket()函数的errno=123

问题描述 MSDOS下socket编程客户端 socket()函数的errno=123 我在MSDOS下编写了一个socket程序,运行于MSDOS71下是可以对一个服务端仿真建立连接的. 然后将程序放在win98下的msdos运行,在socket()获取套接字时errno返回123,但是我在win98下telnet或ping这个服务端仿真都是可以通的. 是否是因为,我win98下的msdos没有安装network client的原因?这个errno=123具体原因是什么? 解决方案 VC++中

spring-Spring MVC使用hessian客户端与服务器之间通讯步骤,求教详细过程!谢谢

问题描述 Spring MVC使用hessian客户端与服务器之间通讯步骤,求教详细过程!谢谢 Spring MVC使用hessian客户端与服务器之间通讯步骤,求教详细过程!谢谢 解决方案 http://www.blogjava.net/iduido/archive/2012/04/11/373831.html

Windows Socket 编程_单个服务器对多个客户端简单通讯 .

单个服务器对多个客户端程序: 一.简要说明 二.查看效果 三.编写思路 四.程序源代码 五.存在问题   一.简要说明:  程序名为:TcpSocketOneServerToMulClient  程序功能:实现单个服务器对多个客户端通讯功能的小程序. PS: 这是继上次简单的 Tcp Windows Socket 编程后的再一程序,程序实现依然不是很严谨,还待完善~   二.查看效果:   三.编写思路:  由上一次的程序思路来看,如果想实现单个服务器对多个客户端程序的通讯的话,这次程序编写尝试

小弟目前要做一个SOCKET编程客户端通讯软件,与多个服务器进行通讯

问题描述 这个项目主要是上位机与下位机通讯方面的东西,因为之前从来没有写过这方面的软件,所以对这个是一无所知.这个软件我想实现的功能就是编写一个客户端上位机软件与多台服务器通讯,当然这些服务器都是一些网卡设备说具体一点就是一些带网卡的单片机或者ARM,在此之前我试了很多次方法(比如说异步多线程什么的)都没有成功但是几天前用了异步方法只是连接成功了但是异步接受还是不行,我知道解决这个方面的问题就是你连接多少个服务器IP就必须必须写多少个接收数据的方法,但是这个系统没有限制呀<有可能是100个设备,