基于TCP(面向连接)的socket编程,分为客户端和服务器端。

客户端的流程如下:

(1)创建套接字(socket)

(2)向服务器发出连接请求(connect)

(3)和服务器端进行通信(send/recv)

(4)关闭套接字

服务器端的流程如下:

(1)创建套接字(socket)

(2)将套接字绑定到一个本地地址和端口上(bind)

(3)将套接字设为监听模式,准备接收客户端请求(listen)

(4)等待客户请求到来;当请求到来后,接受连接请求,返回一个新的对应于此次连接的套接字(accept)

(5)用返回的套接字和客户端进行通信(send/recv)

(6)返回,等待另一个客户请求。

(7)关闭套接字。

本文介绍一个多线程的TCP编程

1:创建服务器端并实现线程类  代码如下

 package tcp;

 import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.Socket; public class Server implements Runnable {//实现一个线程类
private Socket soc;
public Server(Socket soc) {
super();
this.soc = soc;
}
private BufferedReader in=null;
private BufferedReader input=null;//获得各种流对象
PrintWriter out=null;
@Override
public void run() {
// TODO Auto-generated method stub
try {
in=new BufferedReader(new InputStreamReader(soc.getInputStream()));
input=new BufferedReader(new InputStreamReader(System.in));
out=new PrintWriter(soc.getOutputStream(),true);//每次都清空输出流
String message;
while((message=in.readLine())!=null){
System.out.println(message);//读取到的客户端数据
System.out.println("输入回执的数据:");
out.println(input.readLine());//回执数据
}
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}finally{
try {
in.close();
input.close();//关闭各种流对象
out.close();
} catch (Exception e2) {
e2.printStackTrace();
// TODO: handle exception
}
}
} }

2:创建多线程的启动类   代码如下

 package tcp;

 import java.net.ServerSocket;
import java.net.Socket; public class ServerStart { public static void main(String[] args) {
// TODO Auto-generated method stub
try {
ServerSocket server=new ServerSocket(9000);//这只9000为服务器段
Socket soc=new Socket();
while (true) {
soc=server.accept();//监听端口的链接
new Thread(new Server(soc)).start();//只要有链接就启动一个线程
}
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}
} }

3:创建客户端的类  代码如下

 package tcp;

 import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.Socket; public class Client {
private static Socket soc=null;
private static BufferedReader in=null;
private static BufferedReader input=null;
private static PrintWriter out=null; public static void main(String[] args) {
// TODO Auto-generated method stub
try {
soc=new Socket("127.0.0.1",9000);
while(true){
in=new BufferedReader(new InputStreamReader(soc.getInputStream()));
input=new BufferedReader(new InputStreamReader(System.in));
out=new PrintWriter(soc.getOutputStream(),true);
System.out.println("输入发送的数据:");
String op=input.readLine();
out.println(op);
if(op.equals("aa")){
break;
}
System.out.println(in.readLine());
}
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}finally{
try {
in.close();
input.close();
out.close();
} catch (Exception e2) {
// TODO: handle exception
e2.printStackTrace();
}
}
} }

udp查看:http://www.cnblogs.com/GH0522/p/8119289.html

JAVA Socket编程(二)之TCP通信的更多相关文章

  1. TCP/UDP套接字 java socket编程实例

    网络协议七层结构: 什么是Socket? socket(套接字)是两个程序之间通过双向信道进行数据交换的端,可以理解为接口.使用socket编程也称为网络编程,socket只是接口并不是网络通信协议. ...

  2. Java Socket编程题库

    一.    填空题 ___ IP地址____用来标志网络中的一个通信实体的地址.通信实体可以是计算机,路由器等. 统一资源定位符URL是指向互联网"资源"的指针,由4部分组成:协议 ...

  3. Java——Socket编程(一)

    1. 网络基础知识 两台机器之间需要进行通信,需要满足的条件: 每个机器有一个唯一的标识符(IP地址): 他们之间进行通信需要用同一种语言(协议): 每台主机上面有多个应用程序,如QQ,微博,迅雷等, ...

  4. 如何为可扩展系统进行Java Socket编程

    从简单I/O到异步非阻塞channel的Java Socket模型演变之旅 上世纪九十年代后期,我在一家在线视频游戏工资工作,在哪里我主要的工作就是编写Unix Unix Berkley Socket ...

  5. Java Socket编程基础篇

    原文地址:Java Socket编程----通信是这样炼成的 Java最初是作为网络编程语言出现的,其对网络提供了高度的支持,使得客户端和服务器的沟通变成了现实,而在网络编程中,使用最多的就是Sock ...

  6. Java Socket编程(转)

    Java Socket编程 对于Java Socket编程而言,有两个概念,一个是ServerSocket,一个是Socket.服务端和客户端之间通过Socket建立连接,之后它们就可以进行通信了.首 ...

  7. Java基础:三步学会Java Socket编程

    Java基础:三步学会Java Socket编程 http://tech.163.com 2006-04-10 09:17:18 来源: java-cn 网友评论11 条 论坛        第一步 ...

  8. 转:Java Socket编程

    对于Java Socket编程而言,有两个概念,一个是ServerSocket,一个是Socket.服务端和客户端之间通过Socket建立连接,之后它们就可以进行通信了.首先ServerSocket将 ...

  9. 用java网络编程中的TCP方式上传文本文件及出现的小问题

    自己今天刚学java网络编程中的TCP传输,要用TCP传输文件时,自己也是遇到了一些问题,抽空把它整理了一下,供自己以后参考使用. 首先在这个程序中,我用一个客户端,一个服务端,从客户端上传一个文本文 ...

  10. Java Socket编程详细解说

    Java Socket编程 JavaSocketServerSocket乱码超时 Java Socket编程 对于Java Socket编程而言,有两个概念,一个是ServerSocket,一个是So ...

随机推荐

  1. 使用numpy实现批量梯度下降的感知机模型

    生成多维高斯分布随机样本 生成多维高斯分布所需要的均值向量和方差矩阵 这里使用numpy中的多变量正太分布随机样本生成函数,按照要求设置均值向量和协方差矩阵.以下设置两个辅助函数,用于指定随机变量维度 ...

  2. 逆向知识第十四讲,(C语言完结)结构体在汇编中的表现形式

    逆向知识第十四讲,(C语言完结)结构体在汇编中的表现形式 一丶了解什么是结构体,以及计算结构体成员的对其值以及总大小(类也是这样算) 结构体的特性 1.结构体(struct)是由一系列具有相同类型或不 ...

  3. android studio 目录结构讲解

    android studio 目录结构讲解 src 毫无疑问,src目录是放置我们所有 Java代码的地方,它在这里的含义和普通 Java 项目下的 src目录是完全一样的,展开之后你将看到我们刚才创 ...

  4. 微信小程序爬坑日记

    新公司上手小程序.30天,从入门到现在,还没放弃... 虽然小程序发布出来快一年了,爬坑的兄弟们大多把坑都踩平了.而我一直停留在"Hello World"的学习阶段.一来没项目,只 ...

  5. Lonlife 1000 - Spoon Devil's 3-D Matrix

    1000 - Spoon Devil's 3-D Matrix Time Limit:1s Memory Limit:32MByte Submissions:208Solved:65 DESCRIPT ...

  6. mysql故障解决笔记

    错误提示如图 一开始我查询了 [root@web01 mysql]# ls -al /lib/libc* -rwxr-xr-x 1 root root 1909464 Mar 22 01:49 /li ...

  7. 为并发而生的 ConcurrentHashMap(Java 8)

    HashMap 是我们日常最常见的一种容器,它以键值对的形式完成对数据的存储,但众所周知,它在高并发的情境下是不安全的.尤其是在 jdk 1.8 之前,rehash 的过程中采用头插法转移结点,高并发 ...

  8. 企业级Tomcat安全管理优化方案

    telnet管理端口保护 1. 修改默认的8005管理端口为不易猜测的端口(大于1024): <Server port=" shutdown="dangerous" ...

  9. iOS开发之线程间的MachPort通信与子线程中的Notification转发

    如题,今天的博客我们就来记录一下iOS开发中使用MachPort来实现线程间的通信,然后使用该知识点来转发子线程中所发出的Notification.简单的说,MachPort的工作方式其实是将NSMa ...

  10. Java----list常用方法汇总

    package ListTest; import java.util.ArrayList; import java.util.Iterator ; import java.util.List; /** ...