java 基于tcp的socket编程

一、计算机网络课

计算机网络这门课真的和我们的日常和一些常识太精密了,无意中你会发现,唉这是计算机老师讲过的。只要你玩计算机,那么计算机网络常识你应该知道。

二、利用socket实现tcp网络通信

实现这个功能可以是c语言、java、python。我是用java写的,所以我以java为例进行socket简单叙说。

1、编译工具

我用的是elicpse(这里我插一段小故事,因为我把elicpse配置成web的环境了,所以我以为不可以写纯java的程序了,但是百度和查资料发现是可以的。在新建中选择other,你会看到java project,这样就可以了)。我建议使用elicpse,因为它的自动补齐代码,重要的是异常也可以帮助你处理。

2、elicpse运行俩个程序

看了网上好多的教程,说的真是复杂,关键还不实用,我是看了好久都没有解决,在这个问题比我编写代码还要累,花的时间都要久。其实这个非常简单(1)运行你的server代码(2)紧接着运行clicent代码(3)在console下的右边有一排小的的图标,你选择第四个就可以了。点击它选择你已运行的代码。

注释:运行俩个代码后一个不会覆盖第二个,按照我说的做就一定可以成功。

3、java包

因为你要用到sockect和字符流等所以需要引进下面俩个包。

import java.net.*;

import java.io.*;

如何使用里边的方法,大家需要认真学习java的理论知识了

4、程序

4.1这是老师布置的作业,所以我给大家看一下老师的要求。

使用socket实现一个基于C/S架构的通信程序
(1)客户端发送给服务器请求,发送表征身份的用户名和密码(“admin”,“123456”);
(2)服务器根据客户端发来的信息验证身份,如果验证错误,返回“refuse”字符串,并且断开连接信道;
(3)如果通过身份验证,服务器向客户端返回“accept”字符串;
(4)客户端在收到“accept”后,发送服务请求号,“1”表示请求文件传输服务,“2”表示请求数据库查询服务;
(5)服务器收到服务请求号后,用打印语句来模拟服务的动作,完成后返回“finish”字符串;
(6)客户端收到“finish”串后,向服务器端发送“byebye”,终止连接;
(7)双方中断连接,关闭socket。

4.2server

import java.io.BufferedReader;

import java.io.BufferedReader;

import java.io.IOException;

importjava.io.InputStream;import

java.io.InputStreamReader;import

java.io.OutputStream;

import java.io.PrintWriter;

import java.net.*;
public class server {
public static void main(String[] args) throws UnknownHostException,IOException {

// TODO Auto-generated method stub int port=9999;

//服务器端口

ServerSocket serverSocket =new ServerSocket(port);

//建立连接 Socket socket=serverSocket.accept();

System.out.println("server say connection success");

String line; String input;

BufferedReader is=new BufferedReader(new InputStreamReader(socket.getInputStream()));

//输入流 PrintWriter os=new PrintWriter(socket.getOutputStream());

//输出流 BufferedReader sin=new BufferedReader(new InputStreamReader(System.in,"utf-8")); //键盘读入的数据

for(int j=0;j<=5;j++)

{ input=is.readLine();

System.out.println(input);

if(input.equals("jcy")) { os.println("accept");

//向客户端输出的数据 os.flush(); }

else if(input.equals("1"))

{ System.out.println("文件传输完成");

os.println("finsh");//向客户端输出的数据 os.flush(); }

else if(input.equals("2"))

{ System.out.println("数据库查询完成"); os.println("finsh");

//向客户端输出的数据 os.flush();

}else { os.println("refuse");

//向客户端输出的数据

os.flush(); os.close(); is.close(); socket.close(); //System.out.println("请输入2"); }
} os.close(); is.close(); socket.close(); } 
}

4.3clicent

import java.io.IOException;

import java.io.*;

import java.net.Socket;

import java.net.UnknownHostException;
public class clicent {
public static void main(String[] args) throws UnknownHostException, IOException

{ // TODO Auto-generated method stub

String host="localhost"; int port = 9999;

Socket socket =new Socket(host,port);

//建立连接 System.out.println("clicent say connction success too");

BufferedReader sin=new BufferedReader(new InputStreamReader(System.in,"utf-8"));

//键盘读入的数据 PrintWriter os=new PrintWriter(socket.getOutputStream());

//输出流(往服务器发送的数据)

BufferedReader is=new BufferedReader(new InputStreamReader(socket.getInputStream()));

//输入流 //System.out.println("chdw");

//System.out.println("server say :"+is.readLine());

//键盘读入的数据 String readline=sin.readLine(); os.println(readline);

//发送到server System.out.println(readline); os.flush();

//刷新 for(int i=0;i<=5;i++){  

  String isread=is.readLine(); if(isread.equals("accept"))

{ System.out.println("请输入1或2");

String comand=sin.readLine();

os.println(comand); os.flush(); }

else if(isread.equals("finsh"))

{ os.println("byebye"); os.flush(); }

else { os.close(); is.close(); socket.close(); //System.out.println("请输入1"); } } os.close(); is.close(); socket.close(); }
}

代码不难,大家仔细看一下就会懂得。

更详细的实现过程可以看我的博文:
java 基于tcp的socket编程

发布了33 篇原创文章 · 获赞 14 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/baidu_38978508/article/details/84843460
今日推荐