java tcp (单客户端和单服务端通信)

1.为了同时运行客户端和服务端代码,我们在同一台电脑上装两个eclipse软件,一个跑客户端程序,一个跑服务端程序,

2.服务端程序代码:(本代码参考了http://www.cnblogs.com/lichenwei/p/4069432.html),代码如下:

package TcpServerPoint;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;

public class Server {

/**
* Socket服务端
*/
public static void main(String[] args) {
try {
ServerSocket serverSocket=new ServerSocket(9000);
System.out.println("服务端已启动,等待客户端连接..");
Socket socket=serverSocket.accept();//侦听并接受到此套接字的连接,返回一个Socket对象


//根据输入输出流和客户端连接
InputStream inputStream=socket.getInputStream();//得到一个输入流,接收客户端传递的信息
InputStreamReader inputStreamReader=new InputStreamReader(inputStream);//提高效率,将自己字节流转为字符流
BufferedReader bufferedReader=new BufferedReader(inputStreamReader);//加入缓冲区
String temp=null;
String info="";
while((temp=bufferedReader.readLine())!=null){
info+=temp;
System.out.println("已接收到客户端连接");
System.out.println("服务端接收到客户端信息:"+info+",当前客户端ip为:"+socket.getInetAddress().getHostAddress());
}

OutputStream outputStream=socket.getOutputStream();//获取一个输出流,向服务端发送信息
PrintWriter printWriter=new PrintWriter(outputStream);//将输出流包装成打印流
printWriter.print("你好,服务端已接收到您的信息");
printWriter.flush();
socket.shutdownOutput();//关闭输出流



//关闭相对应的资源
printWriter.close();
outputStream.close();
bufferedReader.close();
inputStream.close();
socket.close();

} catch (IOException e) {
e.printStackTrace();
}
}

}

2.客户端代码如下:

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.PrintWriter;
import java.net.Socket;
import java.net.UnknownHostException;

public class Client {

/**
* Socket客户端
*/
public static void main(String[] args) {
try {
//创建Socket对象
Socket socket=new Socket("localhost",9000);

//根据输入输出流和服务端连接
OutputStream outputStream=socket.getOutputStream();//获取一个输出流,向服务端发送信息
PrintWriter printWriter=new PrintWriter(outputStream);//将输出流包装成打印流
printWriter.print("服务端你好,我是Balla_兔子");
printWriter.flush();
socket.shutdownOutput();//关闭输出流

InputStream inputStream=socket.getInputStream();//获取一个输入流,接收服务端的信息
InputStreamReader inputStreamReader=new InputStreamReader(inputStream);//包装成字符流,提高效率
BufferedReader bufferedReader=new BufferedReader(inputStreamReader);//缓冲区
String info="";
String temp=null;//临时变量
while((temp=bufferedReader.readLine())!=null){
info+=temp;
System.out.println("客户端接收服务端发送信息:"+info);
}

//关闭相对应的资源
bufferedReader.close();
inputStream.close();
printWriter.close();
outputStream.close(); socket.close();
} catch (UnknownHostException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}

}

}

3.为了测试是单客户端而不是多客户端,我们再次安装一个eclipse的软件,

4.测试结果如下:

服务端显示:

服务端已启动,等待客户端连接..
已接收到客户端连接
服务端接收到客户端信息:服务端你好,我是Balla_兔子,当前客户端ip为:127.0.0.1

客户端显示:

客户端接收服务端发送信息:你好,服务端已接收到您的信息

另一个客户端显示:

java.net.ConnectException: Connection refused: connect
at java.net.DualStackPlainSocketImpl.connect0(Native Method)
at java.net.DualStackPlainSocketImpl.socketConnect(Unknown Source)
at java.net.AbstractPlainSocketImpl.doConnect(Unknown Source)
at java.net.AbstractPlainSocketImpl.connectToAddress(Unknown Source)
at java.net.AbstractPlainSocketImpl.connect(Unknown Source)
at java.net.PlainSocketImpl.connect(Unknown Source)
at java.net.SocksSocketImpl.connect(Unknown Source)
at java.net.Socket.connect(Unknown Source)
at java.net.Socket.connect(Unknown Source)
at java.net.Socket.<init>(Unknown Source)
at java.net.Socket.<init>(Unknown Source)
at Client.main(Client.java:19)

很显然,确实实现了单客户端,单服务端的通信。

转载于:https://www.cnblogs.com/Cpart/p/7216381.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值