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. SQL注入不简单?那是你没有懂它的原理~

    我们真的了解SQL注入吗? 不管用什么语言编写的Web应用,它们都用一个共同点,具有交互性并且多数是数据库驱动.在网络中,数据库驱动的Web应用随处可见,由此而存在的SQL注入是影响企业运营且最具破坏 ...

  2. mysql 添加索引 mysql 如何创建索引

    1.添加PRIMARY KEY(主键索引) mysql>ALTER TABLE `table_name` ADD PRIMARY KEY ( `column` ) 2.添加UNIQUE(唯一索引 ...

  3. 高可用群集HA介绍与LVS+keepalived高可用群集

    一.Keepalived介绍 通常使用keepalived技术配合LVS对director和存储进行双机热备,防止单点故障,keepalived专为LVS和HA设计的一款健康检查工具,但演变为后来不仅 ...

  4. P4915 帕秋莉的魔导书

    题目链接 题意分析 当前等级为\(x\)的魔法书会对等级在\([x,inf]\)的所有人造成\(y\)的影响 所以除了求平均值之外 就是区间修改区间求和 需要使用动态开点 + 标记永久化 需要注意的是 ...

  5. jinja url_for js 参数

    在JavaScript中,也就是客户端,向flask路由服务器端使用post请求并在url_for中传递参数,服务器端获取不到该参数, Jinja不能使用Javascript变量,如下所示: var ...

  6. python 全栈开发:str(字符串)常用方法操作 、for 有限循环以及if 循环

    str(字符串)常用方法操作: 首字母大写: s = 'mylovepython' s1 = s.capitalize() print(s1) 输出: Mylovepython 单行多字符串首字母大写 ...

  7. Hadoop 3.1.2 下载安装和分布式搭建的准备

    官方有详细文档:https://hadoop.apache.org/docs/r3.1.2/hadoop-project-dist/hadoop-common/SingleCluster.html 我 ...

  8. 响应式Web设计-一种优雅的掌上展现

    入门 flat - style (too many ad.) writeshell

  9. Acronis

    关于这个神奇的东西也没少折腾了我,这里是它的家:http://www.acronis.com/zh-cn/ 网上也看了一些,没有头绪,总之给我的感觉就是不明觉厉.这里小结自己的学到的一些东西,算是一整 ...

  10. (转)AIX的SVMON命令详解

    原文:http://czmmiao.iteye.com/blog/1153499 svmon概述 svmon 命令用于显示当前内存状态的信息,可通过 # lslpp bos.perf.tools 查看 ...