最近突然对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. 前端基础-JavaScript的基本概述和语法

    1.JavaScript概述 2.JavaScript引入方式 3.JavaScript语言规范 4.JavaScript语言基础 5.JavaScript数据类型 6.JavaScript运算符 7 ...

  2. pythonGUI编程打开默认浏览器

    代码: from tkinter import * import webbrowser root = Tk() text = Text(root,width=30,height = 5) text.p ...

  3. iOS 获取自定义cell上按钮所对应cell的indexPath.row的方法

    在UITableView或UICollectionView的自定义cell中创建一button,在点击该按钮时知道该按钮所在的cell在UITableView或UICollectionView中的行数 ...

  4. 关于spring-data-jpa的排序问题

    本测试基于springBoot框架实现. pom.xml文件: <project xmlns="http://maven.apache.org/POM/4.0.0" xmln ...

  5. Heartbleed漏洞利用程序

    #!/usr/bin/python # Quick and dirty demonstration of CVE-2014-0160 by Jared Stafford (jspenguin@jspe ...

  6. javascript 正则表达式判断只能是中文、英文或者中文加英文

    var reglx =/^[\u4e00-\u9fa5a-zA-Z]+$/ 这个是至少有一个中文或者英文 var reglx =/^[\u4e00-\u9fa5a-zA-Z]*$/ 这个是0个以上的中 ...

  7. RocketMQ性能压测分析(转)

    原创文章,转载请注明出处:http://jameswxx.iteye.com/blog/2093785 一   机器部署 1.1  机器组成 1台nameserver 1台broker  异步刷盘 2 ...

  8. No goals have been specified for this build 解决方案

    运行maven报错:[ERROR] No goals have been specified for this build. You must specify a valid lifecycle ph ...

  9. Java Executor框架

    java.util.concurrent 包中包含灵活的线程池实现,但是更重要的是,它包含用于管理实现 Runnable 的任务的执行的整个框架,该框架称为 Executor 框架.该框架基于生产者- ...

  10. JavaScript | 对象与属性

    ———————————————————————————————————————————— 对象:JavaScript是基于原型的语言,没有Class,所以将函数作为类 - - - - - - - - ...