Java中的基于Tcp协议的网络编程

一:网络通信的三要素?

IP地址       端口号       通信协议

IP地址:是网络中设备的通信地址。由于IP地址不易记忆,故可以使用主机名。本地环回地址,127.0.0.1   本地主机名localhost

端口号:发送端准备的数据要发送到指定的目的应用程序上,为了标识这些应用程序,所以用网络数字来标识这些不同的应用程序,这些数

字称为端口号。端口号是不同进程之间的标识。一般来说,有0~65535的端口可供使用,但是1~1024系统使用,或者称作保留端口。

通信协议:指定义的通信规则,这个规则称为协议。国际组织定义了通用TCP/IP协议。我们常见的通信协议有TCP 协议   UDP协议

二:Java中基于TCP协议的网络编程?

首先,我们需要了解TCP协议的一些基本特点:

TCP协议,是面向连接的可靠协议。在数据传输前,必须先建立双方的连接,所以说是面向连接的。在建立的连接中,可以进行大数据量的传输。而且,tcp协议通过三次握手完成连接,所以说是可靠的协议。同时,传输效率比较低。

接下来我们得清楚TCP协议下的网络编程的编程思路:

需要用到两个类:Socket(实现客户端套接字)和ServerSocket(实现服务器套接字)

客户端:

准备好要发送的数据包

   创建客户端的套接字,与服务器端建立连接

调用Socket的方法来发送数据报包

     关闭套接字

服务器端:

   准备接收数据客户端建立连接

      创建服务器的套接字,并且与客户端建立连接

   调用ServerSocket的方法来接受数据

      关闭套接字

三:实例如下

实现基本的客户端的与服务器之间的通信。

客户端代码:

package com.itycl.net;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.net.Socket;
import java.net.UnknownHostException;

public class TcpClientDemo1 {

    public static void main(String[] args) throws Exception {

        Socket s=new Socket("192.168.3.109",8833);//建立连接,绑定目的应用程序的IP地址和端口号

        OutputStream oo=s.getOutputStream();//调用getOutputStream()来发送数据

        BufferedWriter ow=new BufferedWriter(new OutputStreamWriter(oo));//把要发送的数据写到缓冲区

        BufferedReader br=new BufferedReader(new InputStreamReader(System.in));//读取键盘中输入的数据

        String  line=null;

        while((line=br.readLine())!=null) {

            ow.write(line);
            ow.newLine();
            ow.flush();

        }
    }

}

服务器端代码:

package com.itycl.net;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;

public class TcpServerDemo1 {
public static void main(String[] args) throws Exception {

    ServerSocket ss=new ServerSocket(8833);//建立服务器端然套接字

    Socket s=ss.accept();//调用accept方法接受并且监听连接

    InputStream is=s.getInputStream();//调用getInputStream()来接收数据

    BufferedReader br=new BufferedReader(new InputStreamReader(is));

    String ip=s.getInetAddress().getHostAddress();

    String line=null;

    while((line=br.readLine())!=null) {

        byte[] buf=line.getBytes();

        String data=new String(buf,0,buf.length);

        System.out.println(ip +"  :  "+data);
    }
}
}

四.实现客户端与服务器的通信,并且将聊天记录保存在某个盘符下。

要求:可循环发送接收消息,并且保存的聊天记录中要有IP地址+时间+接收的数据,且,要求在一个Java文件中实现。

实例代码:

package com.itycl.net;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileWriter;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.net.ServerSocket;
import java.net.Socket;
import java.text.SimpleDateFormat;
import java.util.Date;

public class TcpClientAndServerDemo {
public static void main(String[] args)  {
    new Thread(new Client()).start();
    try {Thread.sleep(30);}catch(Exception e) {}
    new Thread(new Server()).start();

}
}

class  Client implements Runnable{

    @Override
    public void run() {
        try {
            Socket s=new Socket("localhost",8962);
            OutputStream os = s.getOutputStream();
            BufferedWriter bw=new BufferedWriter(new OutputStreamWriter(os));
            BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
            String line=null;
            while((line=br.readLine())!=null) {
                byte[] buf=line.getBytes();
                String data=new String(buf,0,buf.length);
                bw.write(data);
                bw.newLine();
                bw.flush();
            }
          bw.close();
        }catch(Exception e) {}

    }

}

class Server implements Runnable{

    @Override
    public void run() {
     try {
            ServerSocket ss=new ServerSocket(8962);
            Socket s = ss.accept();
            InputStream is = s.getInputStream();
            BufferedReader br=new BufferedReader(new InputStreamReader(is));
            String line=null;
            while((line=br.readLine())!=null) {
                byte[] buf=line.getBytes();
                String data=new String(buf,0,buf.length);
                String ip=s.getInetAddress().getHostAddress();
                SimpleDateFormat sdft=new SimpleDateFormat("HH:MM:s");//格式化日期
                Date date=new Date();
                String format = sdft.format(date);
                System.out.println(ip+" : "+format+" : "+data);//输出数据

                BufferedWriter  bw=new BufferedWriter(new FileWriter("E://liaotianjilu.txt",true)); //将聊天记录保存到E盘
                bw.write(ip+" : "+format+" : "+data);
                bw.newLine();
                bw.flush();    

            }
        }catch(Exception e) {}

    }

    }

原文地址:https://www.cnblogs.com/MiLanDaEr/p/9911008.html

时间: 2024-10-12 06:46:40

Java中的基于Tcp协议的网络编程的相关文章

学习笔记——网络编程3(基于TCP协议的网络编程)

TCP协议基础 IP协议是Internet上使用的一个关键协议,它的全称是Internet Protocol,即Internet协议,通常简称IP协议. 使用ServerSocket创建TCP服务器 在两个通信实体没有建立虚拟链路之前,必须有一个通信实体先做出“主动姿态”,主动接收来自其他通信实体的连接请求. Java中能接收其他通信实体连接请求的类是ServerSocket,ServerSocket对象用于监听来自客户端Socket连接,如果没有连接,它将一直处于等待状态. ServerSoc

网络编程——基于TCP协议的Socket编程,基于UDP协议的Socket编程

Socket编程 目前较为流行的网络编程模型是客户机/服务器通信模式 客户进程向服务器进程发出要求某种服务的请求,服务器进程响应该请求.如图所示,通常,一个服务器进程会同时为多个客户端进程服务,图中服务器进程B1同时为客户进程A1.A2和B2提供服务. Socket概述 ①   所谓Socket通常也称作“套接字”,用于描述IP地址和端口,是一个通信链的句柄.应用程序通常通过“套接字”向网络发出请求或者应答网络请求. ②   Socket是连接运行在网络上的两个程序间的双向通信的端点. ③  

基于TCP协议的socket编程

一.什么是socket socket本身有"插座"的意思,在TCP/IP协议中,"IP地址+TCP或UDP端口号"唯一标识网络通讯中的个进程,"IP地址+端口号"就称为socket. 在TCP协议中,建立连接的两个进程各自有一个socket来标识,那么这两个socket组成 的socketpair就唯一标识一个连接. 套接字是一种进程间的通信的方法,不同于以往介绍的进程间通信方法的是,它并不局限于同一台计算机的资源,例如文件系统空间,共享内存或者

基于TCP协议之——socket编程

一. 套接字(socket) socket英文为插座的意思,也就是为用户提供了一个接入某个链路的接口.而在计算机网络中,一个IP地址标识唯一一台主机,而一个端口号标识着主机中唯一一个应用进程,因此"IP+端口号"就可以称之为socket. 两个主机的进程之间要通信,就可以各自建立一个socket,其实可以看做各自提供出来一个"插座",然后通过连接上"插座"的两头也就是由这两个socket组成的socket pair就标识唯一一个连接,以此来表示网

基于UDP协议的网络编程

UDP协议是一种不可靠的网络协议,它在通信实例的两端各建立一个Socket,但这两个Socket之间并没有虚拟链路,这两个Socket只是发送.接收数据报的对象. Java使用DatagramSocket代表基于UDP协议的Socket,DatagramSocket本身只是码头,不维护状态,不能产生IO流,它的唯一作用就是接收和发送数据报.Java使用DatagramPacket来代表数据报,DatagramSocket接收和发送数据都是通过DatagramPacket对象完成的. Datagr

基于 UDP 协议的网络编程

类 DatagramSocket 和 DatagramPacket 实现了基于 UDP 协议网络程序 UDP 数据报通过数据报套接字 DatagramSocket 发送和接收,系统不保证 UDP 数据报一定能够安全送到目的地,也不能确定什么时候可以抵达 DatagramPacket 对象封装了 UDP 数据报(<64k),在数据报中包含了发送端的 IP 地址和端口号以及接收端的 IP 地址和端口号 UDP 协议中每个数据报都给出了完整的地址信息,因此无须建立发送方和接收方的连接 举例: publ

基于TCP协议的网络通信

**重点内容**1.使用InetAddress(IP地址类) 这个类有点儿奇葩,没有提供构造方法.而是有两个静态方法来实例化. ·getByName(String host) 通过主机名获取对应的InetAddress对象 ·getByAddress(byte[] addr) 通过IP地址获取对应的InetAddress对象 getCononicalHostName() 获取IP地址的全限定域名 getHostAddress() 返回IP地址字符串 getHostName() 获取IP地址的主机

浅析C#基于TCP协议的SCOKET通信

TCP协议是一个基本的网络协议,基本上所有的网络服务都是基于TCP协议的,如HTTP,FTP等等,所以要了解网络编程就必须了解基于TCP协议的编程.然而TCP协议是一个庞杂的体系,要彻底的弄清楚它的实现不是一天两天的功夫,所幸的是在.net framework环境下,我们不必要去追究TCP协议底层的实现,一样可以很方便的编写出基于TCP协议进行网络通讯的程序. C#基于TCP协议的网络通讯 要进行C#基于TCP协议的网络通讯,首先必须建立同远程主机的连接,连接地址通常包括两部分--主机名和端口,

基于UDP协议之——socket编程

一. socket API 前面一篇<基于TCP协议之--socket编程>http://2627lounuo.blog.51cto.com/10696599/1775559已经花了大量的篇幅讲述了socket和使用基本的socket API所需要注意的问题,这里就不再赘述了.下面主要谈论的是UDP和TCP在socket编程中的不同之处: 1. 创建sock 和TCP面向连接的可靠的字节流传输服务不同的是,UDP是无连接的不可靠的数据报传输服务:虽然有所不同,但同样在进程间通信的时候需要提供出