A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 小罴孩 中级黑马   /  2013-7-30 19:44  /  1766 人查看  /  2 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

/*
演示TCP传输协议

1、TCP分客户端和服务端
2、客户端(Socket),服务端(ServerSocket)
*/

/*
客户端:
通过查阅socket对象,发现在该对象建立时,就可以去连接指定主机
因为TCP是面向连接的,所以在建立socket连接时,就要有服务端存在,并连接成功。形成通路后,在该通道进行数据的传输

步骤:
1、创建Socket服务,指定要连接的主机端口
2、获取socket流中的输出流
3、发送数据
4、为了显示服务端反馈来的信息,获取socket中的输入流,并打印在控制台
5、关闭socket

*/
import java.io.*;
import java.net.*;

//客户端
class TcpClient
{
        public static void main(String[] args) throws Exception{
                //创建客户端的socket服务,指定目的主机和端口。此时socket流产生,可读可写,
                //socket流里面既有输入流,也有输出流
                Socket s = new Socket("127.0.0.255",9999);
               
                //为发送数据,应该获取socket流中的输出流
                OutputStream out = s.getOutputStream();
                //发送数据
                out.write("服务端,你好~!TCP ge men lai le !".getBytes());
               
                //为接收数据,获取相应的输入流
                InputStream in = s.getInputStream();
                //定义一个缓冲字节数组
                byte[] buf = new byte[1024];
                //数组有效长度,read()为阻塞式的
                int len = in.read(buf);
                System.out.println(new String(buf,0,len));
                s.close();
        }
}

/*
定义端点接收/发送数据

服务端:
1、建立服务端的socket服务,ServerSocket();,监听一个端口
2、获取链接过来的客户端对象通过ServerSocket的accept();,这个方法是阻塞式的
3、客户端如果发过来数据,服务端要使用对应的客户端对象,并获取到该客户端对象的读取流
        来读取发过来的数据
4、读到数据后需要作出相应的反馈,通过从客户端获取输出流OutputStream()来发信息
5、关闭服务端(可选操作)
*/
class TcpServer
{
        public static void main(String[] args) throws Exception{
                //建立服务端socket监听9999端口
                ServerSocket ss = new ServerSocket(9999);

                //获取socket对象,accept();方法是阻塞式的
                Socket s = ss.accept();
               
                //获取IP地址
                String ip = s.getInetAddress().getHostAddress();
                System.out.print(ip+"::");

                //获取客户端发送的数据,使用客户端对象的读取流方法
                InputStream in = s.getInputStream();
                //缓冲数组
                byte[] buf = new byte[1024];
                int len = in.read(buf);//read(byte[])返回的是读取的字节数
                System.out.println(new String(buf,0,len));

                //为了回馈给客户端信息,从客户端获取输出流
                OutputStream out = s.getOutputStream();
                //接收到消息,2秒后再回馈给客户端
                Thread.sleep(2000);
                out.write("收到,客户端,你也好!".getBytes());
                s.close();        //关闭客户端
                //ss.close(); //关闭服务端
        }
}

评分

参与人数 1黑马币 +3 收起 理由
神之梦 + 3 只有视频中的代码或者练习是不加技术分滴哦.

查看全部评分

2 个回复

倒序浏览
{:soso_e140:}
回复 使用道具 举报

4.0以后的版本套接字的操作不是不能放在主线程中么?
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马