最近突然对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 socket的更多相关文章

  1. Java联网技术之一TCP

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

  2. Java联网技术之一HTTP

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

  3. 【Cocos2d-x游戏开发】Cocos2d-x中的弱联网技术

    在上一篇博客中,我们一起学习了如何在Cocos2d-x中存储数据和读取信息,本篇博客我们将一起讨论和数据存储同样重要的联网技术. 一.弱联网技术介绍 在网络游戏中许多重要的功能都需要网络连接,而根据需 ...

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

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

  5. 【Java TCP/IP Socket】TCP Socket通信中由read返回值造成的的死锁问题(含代码)(转)

    书上示例 在第一章<基本套接字>中,作者给出了一个TCP Socket通信的例子——反馈服务器,即服务器端直接把从客户端接收到的数据原原本本地反馈回去. 书上客户端代码如下: 1 2 3 ...

  6. java基础-网络编程(Socket)技术选型入门之NIO技术

    java基础-网络编程(Socket)技术选型入门之NIO技术 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.传统的网络编程 1>.编写socket通信的MyServer ...

  7. java tcp socket实例

    java tcp socket实例 2011-04-20 13:58 2364人阅读 评论(1) 收藏 举报 socketjavatcpthreadserverclass package com.ne ...

  8. 【Java TCP/IP Socket】TCP Socket(含代码)

    TCP的Java支持 协议相当于相互通信的程序间达成的一种约定,它规定了分组报文的结构.交换方式.包含的意义以及怎样对报文所包含的信息进行解析,TCP/IP协议族有IP协议.TCP协议和UDP协议.现 ...

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

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

随机推荐

  1. 十. 图形界面(GUI)设计12.滚动条

    滚动条(JScrollBar)也称为滑块,用来表示一个相对值,该值代表指定范围内的一个整数.例如,用Word编辑文档时,编辑窗右边的滑块对应当前编辑位置在整个文档中的相对位置,可以通过移动选择新的编辑 ...

  2. 调用上一个页面的js方法

    点击商品分类,弹出下框 点击确定,将选中的类别的name和唯一的code返回到上个页面 function save(){ var ids = getIdSelections(); jp.get(&qu ...

  3. 【iOS微博客户端开发】1、微博整体项目的构建

    回顾自己做过的项目,总结里面的知识点,分享自己参照WXHL的视频开发的一个模拟微博客户端的过程,为了还在IOS上找不到项目参考的朋友,这里会由一系列手把手的教程,如有不足,还希望可以抖抖小手,献上您宝 ...

  4. t-sql 笔记(1)

    Toad-for-SQL-Server-Freeware 1.查询哪些数据库对象使用了某个表 SELECT b.[name], a.[definition] FROM sys.all_sql_modu ...

  5. Android应用内 代码截屏(获取View快照)和 禁止截屏

    1. 应用内的代码截屏(获取View的快照) Android的View类中提供了获取控件绘制缓存的方法,这种截屏的方式仅限于应用内自己的Activity界面,不需要任何权限,严格来说该方法不属于截屏, ...

  6. Node.js的集群功能以及在Express的配置

    Node.js在v0.6.0版本下内置了集群功能,作为cluster模块,用于nodejs的多核处理,也比较容易通过脚本实现一个负载均衡的集群. 脚本参考了其他人的材料,建立一个server.js(因 ...

  7. Delphi 7下最小化到系统托盘

    在Delphi 7下要制作系统托盘,只能制作一个比较简单的系统托盘,因为ShellAPI文件定义的TNotifyIconData结构体是比较早的版本.定义如下: 123456789   _NOTIFY ...

  8. javascript快速入门12--函数式与面向对象

    函数 函数是一组可以随时随地运行的语句. 函数是 ECMAScript 的核心. 创建函数 function fnOne() {//具有名称的函数,函数名必须符合变量名命名规范 //可以没有符何语句 ...

  9. nav标签使用说明

    一.html nav标签语法与结构   -   TOP 1.基本语法 <nav>内容</nav> 2.nav加id <nav id=”abc”>内容</nav ...

  10. RAID详解[RAID0/RAID1/RAID10/RAID5] (转)

    一.RAID定义RAID(Redundant Array of Independent Disk 独立冗余磁盘阵列)技术是加州大学伯克利分校1987年提出,最初是为了组合小的廉价磁盘来代替大的昂贵磁盘 ...