当前位置: 代码迷 >> J2SE >> 关于TCP协议Socket服务接收数据的有关问题
  详细解决方案

关于TCP协议Socket服务接收数据的有关问题

热度:24   发布时间:2016-04-23 20:24:22.0
关于TCP协议Socket服务接收数据的问题,在线等

import java.io.IOException;
import java.io.InputStream;
import java.net.ServerSocket;
import java.net.Socket;

public class TcpServerDemo {

public static void main(String[] args) {
// TODO Auto-generated method stub
try {
//建立服务端的Socket服务,并监听一个端口
ServerSocket serverSocket = new ServerSocket(10002);

//通过accept方法获取连接过来的客户端对象
Socket socket = serverSocket.accept();

//获取客户端IP地址
String ip = socket.getInetAddress().getHostAddress();
System.out.println("IP : "+ip+"......Connected");

//获取客户端发送过来的数据,那么要使用客户端对象的读取流来读取数据
//获取客户端的读取流
InputStream inputStream = socket.getInputStream();

//创建一个字节数组用于存储读取的数据
byte[] buf = new byte[1024];

//将读取到的数据存储到字节数组中,并返回所读取的长度
int len = inputStream.read(buf);

System.out.println(new String(buf, 0, len));

//关闭客户端
socket.close();
//关闭服务端,此为可选操作
serverSocket.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}

以上为服务端代码

import java.io.IOException;
import java.io.OutputStream;
import java.net.Socket;
import java.net.UnknownHostException;

public class TcpClientDemo {

public static void main(String[] args) {
// TODO Auto-generated method stub
try {
//创建客户端的Socket服务,指定目的主机和端口
Socket socket = new Socket("192.168.79.1", 10002);
//为了发送数据,应该获取Socket流中的输出流
OutputStream outputStream = socket.getOutputStream();
//发送的数据
outputStream.write("Tcp is coming. ".getBytes());
//关闭服务,在这里不用关闭输出流,因为这个输出流是封装在Socket服务中的,
                        //只要关闭了服务,流也就随之关闭了。
socket.close();
} catch (UnknownHostException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}

以上为客户端代码。

运行环境:
JDK:1.8
JRE:1.8
IDE:MyEclipse 2014

问题描述:
首先运行服务端程序,然后运行客户端程序,在Console中没有任何结果显示(完全空白),而且Console显示程序已经结束。
IP地址正确,端口没有被别的进程所占用。

求助,问题出在了哪儿。
如何将客户端发送的数据通过服务端接收到之后打印在控制台上。
------解决方案--------------------
至于你说的第一个问题,我这边运行了一下是没有问题的,可以建立连接,并且server可以打印你client发送的那句话
至于为什么退出了,那是因为你没有循环发送和接收操作,你的server在接收到一次client发送的数据后整个代码就退出了,谢谢!!!
------解决方案--------------------
你看到的是客户端的Console吧,那当然没有输出,你要切换到服务器端Console,这代码应该没有问题。
  相关解决方案