Java联网技术之一TCP

最近突然对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就完成了。

时间: 2024-08-09 11:50:35

Java联网技术之一TCP的相关文章

Java联网技术之一URl

学到Java的联网技术,这里首先来看看关于URl, 要从网上获得内容, 需要实现下面的4步, 1.创建一个表示资源的网络地址的URL对象, 2.创建一个HttpURLConnection 连接对象 3.从得到的连接对象里面获取内容getContent() 4.输出得到的内容 下面是代码: package com.founder.sun; import java.io.BufferedReader; import java.io.IOException; import java.io.InputS

Java远程技术介绍学习

Java远程技术介绍学习 RMI [既Remote Method Invoke 远程方法调用] 实现方式为,类extend了java.rmi.Remote接口,即成为存在于服务器端的远程对象,提供客户端访问. PS: extends了Remote接口的类或者其他接口中的方法若是声明抛出了RemoteException异常,则表明该方法可被客户端远程访问调用. 同时,远程对象必须实现java.rmi.server.UniCastRemoteObject类,这样才能保证客户端访问获得远程对象时,该远

Java加密技术(十)——单向认证

在 Java 加密技术(九)中,我们使用自签名证书完成了认证.接下来,我们使用第三方CA签名机构完成证书签名. 这里我们使用 thawte提供的测试用21天免费ca证书. 1.要在该网站上注明你的域名,这里使用 www.zlex.org作为测试用域名(请勿使用该域名作为你的域名地址,该域名受法律保护!请使用其他非注册域名!). 2.如果域名有效,你会收到邮件要求你访问 https://www.thawte.com/cgi/server/try.exe获得ca证书. 3.复述密钥库的创建. She

JAVA RMI技术及其spring封装的使用

java RMI即java远程服务调用,用于各个子系统之间的服务调用.最近应用到了JAVA RMI技术,所以总结一下RMI的使用,另外EJB的实现也是以Java RMI为基础核心的.RMI远程方法调用,可以跨机器通过网络调用,不过Java RMI只支持两边都是Java程序,如果要实现完全两边异构,那么就要用到传说中的Web Service了.为了看好效果,都要建立两个或两个以上工程,当然,如果你有两个机器并通过局域网相连更好,如果能同有互联网的条件就更好了,以下是同一机器不同工程的实验. Jav

(转)java缓存技术,记录

http://blog.csdn.net/madun/article/details/8569860 最近再ITEYE上看到关于讨论JAVA缓存技术的帖子比较多,自己不懂,所以上网大概搜了下,找到一篇,暂作保存,后面如果有用到可以参考.此为转贴,帖子来处:http://cogipard.info/articles/cache-static-files-with-jnotify-and-ehcache 介绍 JNotify:http://jnotify.sourceforge.net/,通过JNI

浅谈Java分页技术

话不多言.我们要实现java分页技术,我们首先就需要定义四个变量,他们是: int  pageSize;//每页显示多少条记录 int pageNow;//希望现实第几页 int pageCount;//一共有多少页 int rowCount;//一共有多少条记录 说明: 1.pageSize是指定的 2.pageNow是用户选择的 3.rowCount是从表中查询得到的 4.pageCount是计算得到的,该计算为: if(rowCount%pageSize==0) { pageCount=r

java网络编程之TCP实例

Dgram类 package Socket; import java.net.DatagramPacket; import java.net.InetAddress; public class Dgram { public static DatagramPacket toDatagram(String s, InetAddress destIA, int destPort) { byte[] buf = new byte[s.length() + 1]; s.getBytes(0, s.leng

黑马程序员 ---------- Java网络技术之 ---正则表达式 (Day06)

---------------------- ASP.Net+Unity开发..Net培训.期待与您交流! ---------------------- 正则表达式 正则表达式:基本知识 1  字符,   2 字符类 , 3 预定义字符类 , 4 边界匹配器 ,5 Greedy 数量词,6 Logical 运算符 详解: 1 字符 x   字符 x \\ 反斜线字符 \0n 带有八进制值 0 的字符 n (0 <= n <= 7) \0nn 带有八进制值 0 的字符 nn (0 <= n

Java Web技术总结(目录)

来源于:http://www.jianshu.com/p/539bdb7d6cfa Java Web技术经验总结(一) Java Web技术经验总结(二) Java Web技术经验总结(三) Java Web技术经验总结(四) Java Web技术经验总结(五) Java Web技术经验总结(六) Java Web技术经验总结(七) Java Web技术经验总结(八) Java Web技术经验总结(九) Java Web技术经验总结(十) Java Web技术经验总结(十一) 文/杜琪(简书作者