基于TCP的项目学习历程(一)实现简单的socket请求。瞎扯的,不要评论。

来源:互联网 发布:淘宝做什么产品比较好 编辑:程序博客网 时间:2024/06/05 21:09

毕业至今不到两年,但从大四刚开始就在外面开始从事开发工作了。但是一直从事的WEB项目的开发,一直没啥长进。最近由于需要,需要学习基于TCP的服务器开发,由此决定,写点东西,就当是对学习的巩固。

其实我不是技术狂人,也没有多牛掰的理解和总结能力,所以我就是碎碎的学,片片的积累。

TCP/IP ,Transmission Control Protocol/Internet Protocol的简写,中译名为传输控制协议/因特网互联协议。烂七八糟的文档和介绍请到网上去找。其实我觉得,这种协议还是比较适合现在不算智能的智能终端机使用的。。


下面开始,首先提供一个服务端的程序,这个呢是单线程的,是根据网上的demo做的调整,保证可以运行的代码。

import java.net.*;
import java.io.*;

public class SocketServerDemo {
int port = 2345; // 端口号
ServerSocket serverSocket; // 服务器套接字
public SocketServerDemo() {
try {
serverSocket = new ServerSocket(port); // 实例化套接字
System.out.println("start server at port " + port); // 在命令窗口输出提示信息
while (true) { // 一直等待客户端连接
Socket client = serverSocket.accept(); // 等待连接
System.out.println("Connect: " + client.getInetAddress()); // 输出客户机地址
DataOutputStream out = new DataOutputStream(client.getOutputStream()); // 得到输出流
byte[] message = "server message.".getBytes(); // 输出信息字符数组
out.write(message, 0, message.length); // 输出信息

DataInputStream in = new DataInputStream(client.getInputStream()); // 得到输入流
byte[] buffer=new byte[256]; //缓冲区
in.read(buffer); //读入数据到缓冲区
System.out.println(new String(buffer)); //输出信息
}
} catch (IOException ex) {
ex.printStackTrace(); // 输出错误信息
}
}

public static void main(String[] args) {
// 启动执行服务监听
new SocketServerDemo();
}
}

很简单的服务端吧。只需要你加载到服务器上运行起来就OK,就可以请求了。。

然后我们写一个同样简单的虚拟客户端。。。。。

import java.net.*;
import java.io.*;

public class SocketClientDemo{
int port=5678; //端口号
String host="localhost"; //服务器地址
Socket socket; //客户端套接字

public SocketClientDemo(){
try{
socket=new Socket(InetAddress.getByName(host),port); //实例化套按字
// 获取输入流
DataInputStream in=new DataInputStream(socket.getInputStream()); //得到输入流
byte[] buffer=new byte[256]; //缓冲区
in.read(buffer); //读入数据到缓冲区
System.out.println(new String(buffer)); //输出信息
System.out.println("Connect Success!");

// 设置输出流
DataOutputStream out=new DataOutputStream(socket.getOutputStream()); //得到输出流
byte[] message = "client message.".getBytes(); // 输出信息字符数组
out.write(message, 0, message.length); // 输出信息
socket.close(); //关闭套接字
}
catch (IOException ex){
ex.printStackTrace(); //输出错误信息
}
}

public static void main(String[] args){
new SocketClientDemo();
}
}


easy不?你看,其实服务器就是初始化了个服务器套接字做了监听,你客户端只需要夜晚一个端口一直的套接字来请求就OK了嘛。。我自己瞎扯的。。

那还有一个问题没有解决啊,就是关于这个并发请求的问题。你一个线程监听着,你服务器不能只为一个客户端提供服务吧。更简单的来了。尼玛服务器集成Thread不就一切OK了?。。擦。那就玩玩。

代码如下啊。

import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;


public class MultiServer extends Thread{
private Socket server;

private MultiServer(Socket c){
this.server = c;
}
public void run(){
try{
System.out.println("进程的id"+this.getId());
System.out.println("Connect: " + server.getInetAddress()); // 输出客户机地址
DataOutputStream out = new DataOutputStream(server.getOutputStream()); // 得到输出流
byte[] message = "server message.".getBytes(); // 输出信息字符数组
out.write(message, 0, message.length); // 输出信息

DataInputStream in = new DataInputStream(server.getInputStream()); // 得到输入流
byte[] buffer=new byte[256]; //缓冲区
in.read(buffer); //读入数据到缓冲区
System.out.println(new String(buffer)); //输出信息
}catch(IOException ex){

}finally{

}
}

public static void main(String[] args) throws IOException{
ServerSocket server = new ServerSocket(5678);
while(true){
MultiServer mc = new MultiServer(server.accept());
mc.start();
}
}
}

在这个时候我就觉得自己牛逼的不行了。尼玛,这不就实现了嘛?!尼玛,根据传入参数,判断下,调用不同业务实现不就ok了?!井底之蛙就是这么肤浅。。说的就是我这种人。。。。。

操了个蛋啊。我看了个智能终端的接口,一看接口文档,我操。这玩意实现了session登陆啊。尼玛这是什么玩意啊,尼玛该怎么实现啊?。。。我这种混日子的人,虽然做了很久服务器开发,可是全是尼玛在大拿的集成架构下做的啊,这些乱七八糟的还真心不知道。那好吧。玩玩吧。。。。明天弄懂它。。。后者后天。。。。或者大后天。。。。

亲,不要告诉我,我们可以改变下接口的传入参数和传出参数来控制登录状态啊。这个没谱啊。这就是懒人做的(其实是我自己想的,被领导否定了,也不适合现在的项目)。。。。哎,年纪大了,好多东西不能说自己是新人了,时间都去哪儿了啊?!

0 0
原创粉丝点击