tcp程序设计--客户端获取服务器输入输出流

思路:

第一步:实例化一个ServerSocket对象(服务器套接字),用来等待网络上的请求(也就是等待来连接的套接字)

第二步:调用accept()方法,返回一个与客户端socket对象相连接的socket对象

第三步:服务器端socket对象使用getOutputStream方法获得的输出流将指向客户端socket对象使用getInputStream获得的输入流,反之亦然

服务器端代码:

 public class Server {
public static void main(String[] args) {
try {
ServerSocket ss = new ServerSocket(8001);
while (!ss.isClosed()) {
Socket s = ss.accept();
OutputStream ops = s.getOutputStream();
String str = "欢迎进入程序\n编写TCP服务器程序,"
+ "实现创建一个在8001端口上等待的ServerSocket"
+ "对象,当接收到一个客户机的连接请求后,"
+ "程序从与客户机建立了连接的Socket对象中获得输入输出"
+ "流。通过输出流向客户机发送信息。";
ops.write(str.getBytes()); //将字符串变成byte数组写入
ops.close();
s.close();
}
ss.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}

客户端代码:

 public class Client extends JFrame {

     private static final long serialVersionUID = 1L;
private JTextArea textArea;
private JTextField portField;
private JTextField hostField; public static void main(String args[]) { Client frame = new Client();
frame.setVisible(true);
} public Client() {
super();
setBounds(100, 100, 500, 212);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); final JPanel panel = new JPanel();
panel.setLayout(new BoxLayout(panel, BoxLayout.X_AXIS));
getContentPane().add(panel, BorderLayout.NORTH); final JLabel label = new JLabel();
label.setText("连接主机:");
panel.add(label); hostField = new JTextField();
hostField.setText("localhost");
panel.add(hostField); final JLabel label_1 = new JLabel();
label_1.setText("端口:");
panel.add(label_1); portField = new JTextField();
portField.setText("8001");
panel.add(portField); final JButton button = new JButton();
button.addActionListener(new ActionListener() {
public void actionPerformed(final ActionEvent e) {
final String hostName = hostField.getText();
String portNum = portField.getText();
final int port = Integer.parseInt(portNum);
try {
final InetAddress host = InetAddress.getByName(hostName);//实例化对应主机的InetAddress对象
Socket socket = new Socket(host, port); //实例化socket
final InputStream is = socket.getInputStream(); //对应服务器端的getoutputstream
InputStreamReader reader=new InputStreamReader(is);
int data = 0;
while ((data=reader.read()) != -1) {
textArea.append((char)data+"");
}
} catch (Exception e1) {
textArea.append(e1.toString());
e1.printStackTrace();
}
}
});
button.setText("连接");
panel.add(button); final JScrollPane scrollPane = new JScrollPane();
getContentPane().add(scrollPane, BorderLayout.CENTER); textArea = new JTextArea();
textArea.setLineWrap(true); //自动换行
scrollPane.setViewportView(textArea);
}
}

结果如下:

备注:

BoxLayout 箱式布局
BoxLayout 可以把控件依次进行水平或者垂直排列布局,这是通过参数 X_AXIS、Y_AXIS 来决定的。X_AXIS 表示水平排列,而 Y_AXIS 表示垂直排列。BoxLayout 的构造函数有两个参数,一个参数定义使用该 BoxLayout 的容器,另一个参数是指定 BoxLayout 是采用水平还是垂直排列

tcp程序设计--客户端获取服务器输入输出流的更多相关文章

  1. 2015/12/14 Python网络编程,TCP/IP客户端和服务器初探

    一直不是很清楚服务器的定义,对于什么是服务器/客户端架构也只有一个模糊的感觉.最近开始学习,才明白一些什么服务器和客户端的关系. 所谓的服务器,就是提供服务的东西,它是一个硬件或者软件,可以向一个或者 ...

  2. 客户端获取服务器SessionID (Asp.net SessionID)

    SessionID是客户端首次访问某个方法或页面, 并且这个方法中设置了Session["xxx"]=xx; 此时服务器返回的响应头(HttpResponse.Headers)中会 ...

  3. tcp/ip客户端与服务器

    单击“发送数据”把数据发送到指定IP地址的指定端口号 using System; using System.Collections.Generic; using System.ComponentMod ...

  4. WCF客户端获取服务器返回数据报错

    错误信息:An error occurred while receiving the HTTP response to http://127.0.0.1/SIHIS/Infection/PubExec ...

  5. go实现的简易TCP的客户端和服务器

    今天介绍golang版本的通信基础:基于TCP的客户端和服务器实现,参考书籍:The Way To Go 那时学习java的时候也是做过通信的,当时是socket编程,服务器监听某一个端口,然后客户机 ...

  6. Java实验四 TCP客户端和服务器的应用

    实验内容 1.掌握Socket程序的编写: 2.掌握密码技术的使用: 3.设计安全 4.对通信内容进行摘要计算并验证 实验步骤 1.信息安全传送: 发送方A——————>接收方B A加密时,用B ...

  7. asp.net mvc4 简单的服务器监控开发之C#获取服务器CPU、RAM、TCP等系统信息(上)

    一.背景 前段时间服务器出了点问题,加上学业愈来愈紧张,写博文分享的时间越来越少.虽然不是第一次在博客园上写经验,但是近期分享的博文得到了不少的朋友支持和指正,在这里内心非常感激和开心.希望以后能认真 ...

  8. Socket 通信原理(Android客户端和服务器以TCP&&UDP方式互通)

    转载地址:http://blog.csdn.net/mad1989/article/details/9147661 ZERO.前言 有关通信原理内容是在网上或百科整理得到,代码部分为本人所写,如果不当 ...

  9. nodejs向远程服务器发送post请求----融云Web SDK/客户端获取token

    最近要用到一个叫融云的及时通讯的SDK,在获取token这个步骤的时候有点卡顿,以防以后碰到类似的问题,再此记录一下. 客户端通过融云 SDK 每次连接服务器时,都需要向服务器提供 Token,以便验 ...

随机推荐

  1. BZOJ 1426--收集邮票(概率与期望&DP)

    1426: 收集邮票 Time Limit: 1 Sec  Memory Limit: 162 MBSubmit: 504  Solved: 417[Submit][Status][Discuss] ...

  2. Usboot V1.68版本

    V1.68版本,我的收藏之一 官方的介绍: 市面上现在大多数U盘都支持启动机器的功能,但是要制作启动型U盘,需要进入WIN98,现在很多人机器 上都没有98了吧,呵呵.为了做个启动盘,装一个98,多冤 ...

  3. MySQL之FOUND_ROWS()的用法

    SELECT FOUND_ROWS() 输出8(输出该表共有多少列)

  4. Java 读写锁的实现

    一.    synchronized和ReentrantLock的对比 到现在,看到多线程中,锁定的方式有2种:synchronized和ReentrantLock.两种锁定方式各有优劣,下面简单对比 ...

  5. 构造函数详解,explicit,初始化列表

    一.构造函数 在类中有一种特殊的成员函数,它的名字与类名相同,我们在创建类的时候,这个特殊的成员函数就会被系统调用.这个成员函数,就叫“构造函数”. 因为构造函数会被系统自动调动,构造函数的目的就是初 ...

  6. LeetCode 795. Number of Subarrays with Bounded Maximum

    问题链接 LeetCode 795 题目解析 给定一个数组A,左右范围L.R.求子数组的数量,要求:子数组最大值在L.R之间. 解题思路 子数组必须连续,利用最大值R对数组进行分段,设定变量 left ...

  7. C#-MVC基础-模型(Model)、视图(View)和控制器(Controller)

    搜狗百科:http://baike.sogou.com/v25227.htm?fromTitle=MVC MVC全名是Model View Controller,是软件工程中的一种软件架构模式,把软件 ...

  8. Junit 测试exception

    有两种方法: 一.使用ExpectedException 仅在junit4.7以上支持.不仅可以测试捕获到某异常,也可以测试异常message. 使用例子如下: @Rule public Expect ...

  9. string、char *的转换

    string转char* 主要有三种方法可以将str转换为char*类型,分别是:data(); c_str(); copy(); data()方法 string str = "hello& ...

  10. elment 中 el-table 进行校验

    脑洞大开:什么是展示数据最好的方式呢,表格,写得又快,又清晰,又明显,那么就积累一些工作中表格经常使用到的东西. 第一步:效果图: 第二步:举个例子: <template> <div ...