TCP(Socket基础编程)
1、TCP特点:
面向连接、可靠安全、传输量大、速度较慢
2、socket编程主要依靠两个类:socket 、serversocket
example1:客户端可以不停输入字符串,服务端返回字符串的大写
客户端代码:
public static void main(String[] args) throws Exception{
//建立socket连接 连接一旦建立成功 就可以获得 输入流 和 写出流
Socket s = new Socket(InetAddress.getLocalHost(),10001);
//客户端从键盘输入字符
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
//从服务端获取的输入流,可以获取从服务端返回的信息
BufferedReader in = new BufferedReader(new InputStreamReader(s.getInputStream()));
//写出流 方式一 把信息发送到服务端
PrintWriter pw = new PrintWriter(s.getOutputStream(),true);
//写出流 方式二
//BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(s.getOutputStream())); String line = null;
while((line=br.readLine())!=null){
//写到服务端 方式一
pw.println(line);
//写到服务端 方式二
/*
bw.write(line);
bw.newLine();
bw.flush();
*/
//读取服务端返回信息(这是一个阻塞方法)
String result = in.readLine(); System.out.println(result);
}
s.close();
br.close();
}
服务端代码:
public static void main(String[] args) throws Exception {
ServerSocket ss = new ServerSocket(10001);
while(true){
//此方法是阻塞式方法
Socket s = ss.accept();
//服务端这儿需要使用线程 每次接受一个客户端就为其开启一个线程,防止多个客户端访问出现阻塞情况
new Thread(new ServerThread(s)).start();
}
}
class ServerThread implements Runnable{ private Socket socket; public ServerThread(Socket socket) {
this.socket = socket;
} @Override
public void run() {
try {
System.out.println(socket.getInetAddress().getHostAddress()+"is connecting");
BufferedReader br = new BufferedReader(new InputStreamReader(socket.getInputStream()));
PrintWriter pw = new PrintWriter(socket.getOutputStream(),true);
String line =null;
while((line = br.readLine())!=null){
//如果接收到结束标志 则结束
if("over".equals(line)){
break;
}
System.out.println(line);
pw.println(line.toUpperCase());
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} }
}
Example2:上传文件——客户端将文件内容写到服务端,服务端 将内容保存到其他位置,实现从服务端上传文件的功能
客户端代码:
public static void main(String[] args) throws Exception {
Socket s = new Socket(InetAddress.getLocalHost(),10001);
BufferedReader br = new BufferedReader(new FileReader(new File("D:/baichuanyu/HelloWorld/src/com/action/Hello.java")));
BufferedReader in = new BufferedReader(new InputStreamReader(s.getInputStream()));
PrintWriter pw = new PrintWriter(s.getOutputStream(),true);
String line = null;
while((line=br.readLine())!=null){
pw.println(line);
}
//文件内容写到服务器完成后,服务端没有接受到结束标志,会继续readline()下去
//通过shutdownOutput()方法 可以向服务器写-1结束标志 从而结束服务端的readline()方法
s.shutdownOutput();
String result = in.readLine();
System.out.println(result);
s.close();
br.close();
}
服务端代码:
class UploadThread implements Runnable{ private Socket socket; public UploadThread(Socket socket) {
this.socket = socket;
} @Override
public void run() {
try {
System.out.println(socket.getInetAddress().getHostAddress()+" is connecting....");
BufferedReader br = new BufferedReader(new InputStreamReader(socket.getInputStream()));
PrintWriter pw = new PrintWriter(new FileWriter(new File("E:\\Hello.txt")),true);
PrintWriter os = new PrintWriter(socket.getOutputStream(),true);
String line =null;
while((line = br.readLine())!=null){
pw.println(line);
}
os.println("over");
pw.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} }
}
public static void main(String[] args) throws Exception {
ServerSocket ss = new ServerSocket(10001);
while(true){
//此方法是阻塞式方法
Socket s = ss.accept();
//服务端这儿需要使用线程 每次接受一个客户端就为其开启一个线程,防止多个客户端访问出现阻塞情况
new Thread(new UploadThread(s)).start();
}
}
TCP(Socket基础编程)的更多相关文章
- 【Socket】Java Socket基础编程
Socket是Java网络编程的基础,了解还是有好处的, 这篇文章主要讲解Socket的基础编程.Socket用在哪呢,主要用在进程间,网络间通信.本篇比较长,特别做了个目录: 一.Socket通信基 ...
- 再次回首 TCP Socket服务器编程
转载:http://www.cnblogs.com/zc22/archive/2010/06/27/1766007.html ------------------ 前言 --------------- ...
- 经过一年时间的沉淀 再次回首 TCP Socket服务器编程--转
------------------ 前言 ------------------ 开发了这么多年,发现最困难的程序开发就是通讯系统. 其他大部分系统,例如CRM/CMS/权限框架/MIS之类的,无论怎 ...
- C#网络程序设计(2)Socket基础编程
本节介绍如何使用基础Socket实现TCP通信. (1)Socket详细介绍: Socket的英文原义是"孔"或"插座".通常称作"套 ...
- 经过一年时间的沉淀 再次回首 TCP Socket服务器编程 (二)
------------------ 前言 ------------------ 发了第一篇文章后,有不少同志留言,看来socket编程仍然是软件系统里面一个比较难的部分. 第一篇文章主要介绍了传输协 ...
- Socket基础编程
地址结构sockaddr_in 其中包含:IP地址,端口号,协议族推荐使用sockaddr_in,而不建议使用sockaddrsockaddr_in与sockaddr是等价的,但sockaddr_in ...
- socket基础编程-1
server端和client端 1.server端: import socket server=socket.socket() server.bind(('localhost',8080)) serv ...
- socket基础编程-2
client端: import socket while True: client=socket.socket(socket.ANET,socket.SOCK_STREAM) client.conne ...
- C++ SOCKET 基础编程
{ http://c.biancheng.net/socket/ }
随机推荐
- 记一个react拖动排序中的坑:key
在做一个基于react的应用的时候遇到了对列表拖动排序的需求.当使用sortable对列表添加排序支持后发现一个问题:数据正确排序了,但是dom的顺序却乱了,找了一会儿原因后发现是因为在渲染数据的时候 ...
- HDU 1022 Train Problem I[给出两个长n的串,入栈和出栈顺序,判断入栈顺序是否可以匹配出栈顺序]
Train Problem I 时间限制:3000 ms | 内存限制:65535 KB 难度:2 描述 As the new term comes, the Ignatius Train Sta ...
- SecureCRT鼠标快速复制粘贴
- Maven出现错误No plugin found for prefix 'jetty' in the current project and in the plugin groups的问题解决
只需在maven的setting.xml文件上加入如下节点: <pluginGroups> <pluginGroup>org.mortbay.jetty</pluginG ...
- Tiny4412 支持 adb reboot-bootloader
硬件版本: Tiny4412ADK + S700 4GB u-boot 版本: u-boot-2010-12 linux版本: Linux-3.0.8 版本一 支持 adb re ...
- jeffy-vim-v2.8.tgz
vim 配置 jeffy-vim-v2.8.tgz
- python+tesseract验证码识别的一点小心得
由于公司需要,最近开始学习验证码的识别 我选用的是tesseract-ocr进行识别,据说以前是惠普公司开发的排名前三的,现在开源了.到目前为止已经出到3.0.2了 当然了,前期我们还是需要对验证码进 ...
- 3D立体显示技术原理与游戏应用历程简介 【转】
本文来自 中关村ZOL 「3D 立体显示」可说是近来娱乐产业相当热门的话题,不但有好莱坞推出<阿凡达>等卖座 3D 立体电影,全球各大家电厂商也积极布局准备推出一系列支持 3D 立体显示的 ...
- ElasticSearch查询max_result_window问题处理
需要出一份印地语文章的表,导出规则为: 1.所有印地语(包含各种颜色,各种状态)的文章 2.阅读数大于300 3.按照阅读推荐比进行排序,取前3000篇文章 说明: 1.文章信息,和阅读推荐数量在两个 ...
- 转:Java 自动装箱与拆箱(Autoboxing and unboxing)
转: http://www.cnblogs.com/danne823/archive/2011/04/22/2025332.html 什么是自动装箱拆箱 基本数据类型的自动装箱(autoboxing) ...