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基础编程)的更多相关文章

  1. 【Socket】Java Socket基础编程

    Socket是Java网络编程的基础,了解还是有好处的, 这篇文章主要讲解Socket的基础编程.Socket用在哪呢,主要用在进程间,网络间通信.本篇比较长,特别做了个目录: 一.Socket通信基 ...

  2. 再次回首 TCP Socket服务器编程

    转载:http://www.cnblogs.com/zc22/archive/2010/06/27/1766007.html ------------------ 前言 --------------- ...

  3. 经过一年时间的沉淀 再次回首 TCP Socket服务器编程--转

    ------------------ 前言 ------------------ 开发了这么多年,发现最困难的程序开发就是通讯系统. 其他大部分系统,例如CRM/CMS/权限框架/MIS之类的,无论怎 ...

  4. C#网络程序设计(2)Socket基础编程

        本节介绍如何使用基础Socket实现TCP通信.     (1)Socket详细介绍: Socket的英文原义是"孔"或"插座".通常称作"套 ...

  5. 经过一年时间的沉淀 再次回首 TCP Socket服务器编程 (二)

    ------------------ 前言 ------------------ 发了第一篇文章后,有不少同志留言,看来socket编程仍然是软件系统里面一个比较难的部分. 第一篇文章主要介绍了传输协 ...

  6. Socket基础编程

    地址结构sockaddr_in 其中包含:IP地址,端口号,协议族推荐使用sockaddr_in,而不建议使用sockaddrsockaddr_in与sockaddr是等价的,但sockaddr_in ...

  7. socket基础编程-1

    server端和client端 1.server端: import socket server=socket.socket() server.bind(('localhost',8080)) serv ...

  8. socket基础编程-2

    client端: import socket while True: client=socket.socket(socket.ANET,socket.SOCK_STREAM) client.conne ...

  9. C++ SOCKET 基础编程

    { http://c.biancheng.net/socket/ }

随机推荐

  1. 洛谷——1115 最大子段和(区间DP)

    题目描述 给出一段序列,选出其中连续且非空的一段使得这段和最大. 输入输出格式 输入格式: 输入文件maxsum1.in的第一行是一个正整数N,表示了序列的长度. 第2行包含N个绝对值不大于10000 ...

  2. 你知道如何在springboot中使用redis吗

    特别说明:本文针对的是新版 spring boot 2.1.3,其 spring data 依赖为 spring-boot-starter-data-redis,且其默认连接池为 lettuce ​  ...

  3. 3)nginx的启动与停止、重启,linux配置对外端口

    [启动] 启动代码格式:nginx安装目录地址 -c nginx配置文件地址例如: [root@LinuxServer sbin]# /usr/local/nginx/sbin/nginx -c /u ...

  4. 深入SQL SERVER 2000的内存管理机制

    http://www.cnblogs.com/softj/articles/243591.html

  5. IOS7开发~API变化

    1.弃用 MKOverlayView 及其子类,使用类 MKOverlayRenderer: 2.弃用 Audio Toolbox framework 中的 AudioSession API,使用AV ...

  6. Displaying Tabbed and Stacked Canvas Using Show_View In Oracle Forms

    Displays the indicated canvas at the coordinates specified by the canvas's X Position and Y Position ...

  7. 解释一下Windows dos中的符号

    容许我放一段Windows的批处理: sc <server> [command] [service name] <option1> <option2>... < ...

  8. linux 之体验(JDK7+Tomcat7+MySQL5.5)部署环境

    ---------------------------------------------------------------------------------------------------- ...

  9. Unique Binary Search Trees I&II——给定n有多少种BST可能、DP

    Given n, how many structurally unique BST's (binary search trees) that store values 1...n? For examp ...

  10. 检验 java 基础数据类型参数传递方式

    测试证明,java基础数据类型参数传递值虽是引用传递但是值不会改变.对象是引用传递,值会改变. 为什么?找到一段话来解释这个问题. "对于字符串对象来说,虽然在参数传递的时候也是引用传递,但 ...