最近突然对java网络编程编程这一块非常感兴趣,于是找了很多资料,一点点的尝试,下面是自己的一点小见解,不喜勿喷,欢迎指正。

首先说说客户端和服务器端吧,

如果是网页的话,客户端通过网页的链接对服务器发送请求,服务器做出处理返回给客户。

如果是app的话,那如果自己写服务器端的话,那就是用户通过客户端操作,想服务器端发送请求,然后服务器端就会相应的做出回应。

原理都是一样的。

下面上代码。注意。如果是在eclipse里面的话,先运行服务器代码,再运行客户端代码。

服务器代码:

package com.sun;

import java.io.BufferedReader;
import java.io.DataInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket; public class TcpServer { public static void main(String[] args) throws IOException {
System.out.println("这里是服务器!");
//6666为服务器的端口号
ServerSocket server = new ServerSocket(10000);
System.out.println("Server is starting...");
Socket client = server.accept();//监听端口,并接收客户端来的请求 //第二.得到客户端的输入流(这里注意,客户端的输出其实到服务器端了就是输出了,也就是请求对应响应的关系)
InputStreamReader inputstreamreader = new InputStreamReader(client.getInputStream());//得到输入的字节流 BufferedReader br = new BufferedReader(inputstreamreader); //将得到的字节流读入缓冲区
//第三,得到客户端的输出流,想客户端的输出流传入数据
PrintWriter pw = new PrintWriter(client.getOutputStream(),true);//得到一个客户端的响应流
String line = ""; while(line != null){
line = br.readLine();
FileOutputStream file = new FileOutputStream("Person.txt");//这里是用一个文本接收,写入,表示服务器
//端接收到了数据
/* byte[] b = new byte[1024];
b = line.getBytes();
file.write(b);*/
pw.println("服务器接收的是:" + line); file.flush(); } br.close();
pw.close();
}
}

客户端代码:

package com.sun;

import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.BufferedReader;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.PrintStream;
import java.io.PrintWriter;
import java.net.InetAddress;
import java.net.ServerSocket;
import java.net.Socket;
import java.net.SocketException; public class TcpClient { /**
* @param args
* @throws IOException
*/ public static void main(String[] args) throws IOException {
// TODO Auto-generated method stub
InetAddress host = InetAddress.getLocalHost();
Socket client = new Socket(host,10000); //根据一个端口号和IP连接一个服务器 //第一:得到一个客户端的输出流,
PrintWriter pw = new PrintWriter(client.getOutputStream(),true);
//通过输出流将数据通过流的方式传送到服务器端
BufferedReader wt=new BufferedReader(new InputStreamReader(System.in));
String str = wt.readLine();
pw.println("您输入的是=" + str); //第四.客服端接收到服务器传输的输出流变成输入流(接收到响应的数据)
//接收服务器返回的数据
BufferedReader br = new BufferedReader(new InputStreamReader(client.getInputStream()));
String line = br.readLine();
System.out.println("客服端输出="+line); br.close();
pw.close();
client.close();
} }

输出结果为:

nihao
客服端输出=服务器接收的是:您输入的是=nihao

这样一个简单的socket就完成了。

Java联网技术之一TCP的更多相关文章

  1. Java联网技术之一TCP socket

    最近突然对java网络编程编程这一块非常感兴趣,于是找了很多资料,一点点的尝试,下面是自己的一点小见解,不喜勿喷,欢迎指正. 首先说说客户端和服务器端吧, 如果是网页的话,客户端通过网页的链接对服务器 ...

  2. Java联网技术之一HTTP

    学到Java的联网技术,这里首先来看看关于URl, 要从网上获得内容, 需要实现下面的4步, 1.创建一个表示资源的网络地址的URL对象, 2.创建一个HttpURLConnection 连接对象 3 ...

  3. 深入分析Java Web技术内幕(修订版)

    阿里巴巴集团技术丛书 深入分析Java Web技术内幕(修订版)(阿里巴巴集团技术丛书.技术大牛范禹.玉伯.毕玄联合力荐!大型互联网公司开发应用实践!) 许令波 著   ISBN 978-7-121- ...

  4. Servlet工作原理解析 《深入分析java web 技术内幕》第九章

    参考关于servblet的相关文章 侧重概况:https://blog.csdn.net/levycc/article/details/50728921 ibm的相关:https://www.ibm. ...

  5. 《深入分析Java Web技术内幕》读书笔记 - 第1章 深入Web请求过程

    第1章 深入Web请求过程 1 1.1 B/S网络架构概述 2 基于统一的应用层协议HTTP来交互数据. 1.2 如何发起一个请求 4 HTTP连接本质是建立Socket连接.请求实现方式:工具包如H ...

  6. developerWorks 图书频道: 深入分析 Java Web 技术内幕,第 10 章

    developerWorks 图书频道: 深入分析 Java Web 技术内幕,第 10 章 深入理解 Session 与 Cookie Session 与 Cookie 不管是对 Java Web ...

  7. JAVA Coder 的《深入分析Java Web 技术内幕》读书笔记

    本文基于<深入分析Java Web 技术内幕> <深入分析Java Web 技术内幕>,作者是 许令波,电子工业出版社.本文只是记录书本当中的精彩部分,作个人回顾和技术分享,请 ...

  8. Java多线程技术:实现多用户服务端Socket通信

    目录 前言回顾 一.多用户服务器 二.使用线程池实现服务端多线程 1.单线程版本 2.多线程版本 三.多用户与服务端通信演示 四.多用户服务器完整代码 最后 前言回顾 在上一篇<Java多线程实 ...

  9. Java进阶:基于TCP通信的网络实时聊天室

    目录 开门见山 一.数据结构Map 二.保证线程安全 三.群聊核心方法 四.聊天室具体设计 0.用户登录服务器 1.查看当前上线用户 2.群聊 3.私信 4.退出当前聊天状态 5.离线 6.查看帮助 ...

随机推荐

  1. OpenXml操作Word的一些操作总结.无word组件生成word.

    OpenXml相对于用MS提供的COM组件来生成WORD,有如下优势: 1.相对于MS 的COM组件,因为版本带来的不兼容问题,及各种会生成WORD半途会崩溃的问题. 2.对比填满一张30多页的WOR ...

  2. 使用PowerDesigner建立数据库模型

    转自:http://www.cnblogs.com/tonyepaper/archive/2008/02/12/1067260.html 1.       打开PowerDesigner,点击File ...

  3. Data binding 在Activity,Fragment中引用以及加载其他布局

    Data binding在Activity中使用: DataBindingUtil.setContentView(this, R.layout.activity_home); Data binding ...

  4. 关于 Unity UI 中 GraphicRaycaster.Raycast 数量巨大的问题

    有时候会发现 Unity UI 非常耗时,在 Profiler 中可以轻易的看到 UI 中 的 GraphicRaycaster.Raycast 单帧调用可以成百上千,甚至好几千,帧速率前不忍赌,一关 ...

  5. NOIP2000 单词接龙

    题三.  单词接龙                (27分)    问题描述    单词接龙是一个与我们经常玩的成语接龙相类似的游戏,现在我们已知一组单词,且给定一个开头的字母,要求出以这个字母开头的 ...

  6. Esper系列(十)NamedWindow语法delete、Select+Delete、Update

    On-Delete With Named Windows 功能:在Named Windows中删除事件. 格式: 1  ,   4  field_b = win.field_a,  5  field_ ...

  7. Storm系列(十)聚流示例

    功能:将多个数据源的数据汇集到一个处理单元进行集中分类处理: 入口类TestMain 1  ; i < size; i++) { 31              content += input ...

  8. 在触屏设备中拖动 overflow 元素

    在 Android 和 iOS 等触屏设备中,如果网页中某元素设置 overflow: auto 或者 overflow:scroll,那么问题就来了.在 Android 3.0 之前以及 iPhon ...

  9. 什么时候应该使用C#的属性

    博客搬到了fresky.github.io - Dawei XU,请各位看官挪步.最新的一篇是:什么时候应该使用C#的属性.

  10. HTML中Select的使用具体解释

    <html> <head> <SCRIPT LANGUAGE="JavaScript"> <!-- //oSelect 列表的底部加入了一 ...