java socket 客户端是如何向服务器端发送消息的

服务器端代码
package teststock;

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;

public class Server2 {
public static void main(String[] args) {
try {
ServerSocket server = new ServerSocket(5678);

Socket client = server.accept();

System.out.println("接收到客户端的请求");
BufferedReader in = new BufferedReader(new InputStreamReader(client.getInputStream()));

PrintWriter out = new PrintWriter(client.getOutputStream());

while(true){
String str = in.readLine();
System.out.println(str);
out.print("has receive...");
out.flush();
if(str.toLowerCase().equals("end")){
break;
}
}
client.close();
} catch (Exception e) {
// TODO: handle exception
}
}
}

客户端代码

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.InetAddress;
import java.net.Socket;

public class Client2 {

static Socket socket;
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
try {
socket = new Socket(InetAddress.getLocalHost(),5678);

BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()));

PrintWriter out = new PrintWriter(socket.getOutputStream());

BufferedReader wt = new BufferedReader(new InputStreamReader(System.in));

while(true){
String str = wt.readLine();

System.out.println("客户端输入"+str);

out.print(str);

out.flush();

if(str.toLowerCase().equals("end")){
break;
}
// System.out.println(in.readLine());
}
socket.close();
} catch (Exception e) {
// TODO: handle exception
}
}
}

服务器端和客户端都是通过SOCKET来进行通信的,首先产生一个 socket实例,通过这个实例,服务器端调用accept这个方法接收来自客户端发送的信息.但是在产生socket实例的时候必须初始化一个端口.用来负责接受客户端的请求!
客户端要给服务器发送消息也必须产生一个socket实例,初始化的时候必须指定服务器的IP地址,并且指定服务接收的端口号,这样客户端才能找到服务器要接收的地方,找到地方就可以发送过去了。和你写信一样。找到地址
BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()));

PrintWriter out = new PrintWriter(socket.getOutputStream());

BufferedReader wt = new BufferedReader(new InputStreamReader(System.in));
这个只是用来获取一个从键盘的一个流.传送给服务器端的数据都是通过流来表示的。意思是是键盘输入的一个字节转化成字符流.并输出或者写入!
温馨提示:答案为网友推荐,仅供参考
第1个回答  2015-10-23

java socket客户端向服务器端发送消息,可以使用socket类,实例如下:



mport java.io.*;
import java.net.*;

public class EchoClient {

     public static void main(String args[]) {
         try {

          Socket connection =new Socket("127.0.0.1", 5050);
          BufferedReader input = new BufferedReader(new InputStreamReader(
                    connection.getInputStream()));
             
             PrintWriter out = new PrintWriter(connection.getOutputStream(),true );
             String info;
             info = input.readLine();
             System.out.println(info);
             boolean done = false;
             BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
             String sInput;
             
             //out.println("BYE");

             while (!done) {
             

                 info = input.readLine();
                 System.out.println(info);
                 
             }
             connection.close();
         }
         catch (SecurityException e) {
             System.out.println("SecurityException when connecting Server!");
         }
         catch (IOException e) {
             System.out.println("IOException when connecting Server!");
         }
     }

}

第2个回答  2011-01-05
基于C/S(即客户端/服务器)模式的通信,有使用面向连接协议(TCP)协议进行的,也可以用面向无连接的UDP协议的。不过就上述程序来看,是TCP Socket了。客户端和服务器通过Socket方式进行通信,Socket可以形象地理解成一个介于服务器和客户端的通道,通道的两端均通过该通道读取和写入Message,程序中的BufferedReader和PrintWriter均为I/O流,只是适用的对象不同而已,BuffedrReader是字符流,需套接在字节流上,用于读取信息,socket.getInputStream()表明读取的对象是Socket中输入的信息,PrintWriter用于向Socke中打印信息。另外,System.out.println()方法用于向标准输出设备输出信息。理解该程序时,需搞明白向哪个对象中读取还是写入信息。稍微抽象一点,不过不是很难,再好好看看书,仔细琢磨琢磨,相信你能明白的!
第3个回答  2011-01-05
你要说什么?