一、计算机网络课
计算机网络这门课真的和我们的日常和一些常识太精密了,无意中你会发现,唉这是计算机老师讲过的。只要你玩计算机,那么计算机网络常识你应该知道。
二、利用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编程