tcp程序设计--客户端获取服务器输入输出流
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程序设计--客户端获取服务器输入输出流的更多相关文章
- 2015/12/14 Python网络编程,TCP/IP客户端和服务器初探
一直不是很清楚服务器的定义,对于什么是服务器/客户端架构也只有一个模糊的感觉.最近开始学习,才明白一些什么服务器和客户端的关系. 所谓的服务器,就是提供服务的东西,它是一个硬件或者软件,可以向一个或者 ...
- 客户端获取服务器SessionID (Asp.net SessionID)
SessionID是客户端首次访问某个方法或页面, 并且这个方法中设置了Session["xxx"]=xx; 此时服务器返回的响应头(HttpResponse.Headers)中会 ...
- tcp/ip客户端与服务器
单击“发送数据”把数据发送到指定IP地址的指定端口号 using System; using System.Collections.Generic; using System.ComponentMod ...
- WCF客户端获取服务器返回数据报错
错误信息:An error occurred while receiving the HTTP response to http://127.0.0.1/SIHIS/Infection/PubExec ...
- go实现的简易TCP的客户端和服务器
今天介绍golang版本的通信基础:基于TCP的客户端和服务器实现,参考书籍:The Way To Go 那时学习java的时候也是做过通信的,当时是socket编程,服务器监听某一个端口,然后客户机 ...
- Java实验四 TCP客户端和服务器的应用
实验内容 1.掌握Socket程序的编写: 2.掌握密码技术的使用: 3.设计安全 4.对通信内容进行摘要计算并验证 实验步骤 1.信息安全传送: 发送方A——————>接收方B A加密时,用B ...
- asp.net mvc4 简单的服务器监控开发之C#获取服务器CPU、RAM、TCP等系统信息(上)
一.背景 前段时间服务器出了点问题,加上学业愈来愈紧张,写博文分享的时间越来越少.虽然不是第一次在博客园上写经验,但是近期分享的博文得到了不少的朋友支持和指正,在这里内心非常感激和开心.希望以后能认真 ...
- Socket 通信原理(Android客户端和服务器以TCP&&UDP方式互通)
转载地址:http://blog.csdn.net/mad1989/article/details/9147661 ZERO.前言 有关通信原理内容是在网上或百科整理得到,代码部分为本人所写,如果不当 ...
- nodejs向远程服务器发送post请求----融云Web SDK/客户端获取token
最近要用到一个叫融云的及时通讯的SDK,在获取token这个步骤的时候有点卡顿,以防以后碰到类似的问题,再此记录一下. 客户端通过融云 SDK 每次连接服务器时,都需要向服务器提供 Token,以便验 ...
随机推荐
- apache2 的https配置和代理https后端nodejs配置
先进入 /usr/local/apache2/conf 目录 修改 vim httpd.conf 把下面的去掉注释 LoadModule proxy_module modules/mod_pro ...
- oracle常用cmd命令
登陆 sqlplus username/password; 切换: conn username/password; 显示当前登陆用户: show user; 查看用户列表 select usernam ...
- idea部署tomcat:tomee required to support ear/ejb de。。
要确定artifact 的type是使用的web application :exploded类型,使用javaee application :exploded就会报这个错误.
- Vue 不睡觉教程1-从最土开始
目标最近在学习vue的过程中发现网上的vue教程总有些不同的问题,有的教程上来只说语法,有的教程上来就用vue-cli来建项目,但是vue-cli是整合了webpack等多个插件的工具,不利于我们学习 ...
- 浅谈mongodb与Python的交互
1. mongdb和python交互的模块 pymongo 提供了mongdb和python交互的所有方法 安装方式: pip install pymongo 2. 使用pymongo 导入pymon ...
- .Net Core 发布异常 An assembly specified in the application
在Core 2.0站点发布时.. DotNet WW.kkkk.dll 报错..报文内容如下: Error: An assembly specified in the application depe ...
- es6里class类
/** * Created by issuser on 2018/11/27. *///如果静态方法包含this关键字,这个this指的是类,而不是实例./** (1)类的实例属性 1.类的实例属性可 ...
- Mac 10.12为打开终端增加快捷键(转)
1.在实用工具中打开Automator.app 2.选择新建,然后选择服务 3.服务收到选择为没有输入 然后在左边侧栏中双击Run AppleScript(有些系统会显示运行 AppleScript) ...
- (转)MySql数据库4【命令行赋权操作】
MySQL 赋予用户权限命令的简单格式可概括为:grant 权限 on 数据库对象 to 用户 原文:http://www.cnblogs.com/zhuyibo/p/3980328.html 一.g ...
- c#移位运算符("<<"及">>")详细说明
以前感觉移位运算符自己挺明白的,也许是学的时间长了,后来一看,忘得差不多了.现在参考一些网上的学习资料,将位移运算符整理一下,作为知识点总结,也算个积累.在讲移位运算符之前,先简单补充一下原码与补码的 ...