TCP服务器和客户端_Socket编程

  • TCP服务器


  1. 服务器启动文件
 1 import java.io.IOException;
 2 import java.net.ServerSocket;
 3 import java.net.Socket;
 4
 5 public class MyServer {
 6
 7     public static void main(String[] args) {
 8
 9         ServerSocket serverSocket = null;
10         Socket socket = null;
11
12         try {
13
14             //创建服务器套接字ServerSocket,并绑定服务器端口号,port:1-65536,>1024
15             serverSocket =new ServerSocket(9999);
16
17             while(true) {//可以响应多个各户端
18                 System.out.println("服务器开始运行....");
19                 //阻塞等待客户端
20                 socket = serverSocket.accept();
21
22                 //开启线程响应客户端,并将通信套接字socket转入子线程
23                 new MyServerThread(socket).start();
24             }
25
26         } catch (IOException e) {
27
28             e.printStackTrace();
29
30         }finally {
31             //完成或者异常时,关闭套接字
32             try {
33
34                 socket.close();
35                 serverSocket.close();
36
37             } catch (IOException e) {
38
39                 e.printStackTrace();
40
41             }
42
43         }
44
45     }
46 }
  1. 服务器线程文件
 1 import java.io.IOException;
 2 import java.io.InputStream;
 3 import java.io.OutputStream;
 4 import java.net.Socket;
 5
 6 public class MyServerThread extends Thread{
 7
 8     private Socket socket = null;
 9     private InputStream in;
10     private OutputStream out;
11
12     public MyServerThread(Socket socket) {
13
14         this.socket = socket;
15
16         //客户端IP
17         String ip = socket.getInetAddress().getHostAddress();
18         int port = socket.getPort();
19         System.out.println("IP:" +ip +"port:"+port);
20     }
21
22     //发送和接收数据
23     @Override
24     public void run() { //响应客户端(数据收发)
25
26         try {
27             //获取输入输出流
28             in = socket.getInputStream();
29             out = socket.getOutputStream();
30
31             while(true) {//多次
32                 //登陆协议 loginnamehellopass123456end
33
34                 byte []b = new byte[32];//用于存放read到的数据流
35                 in.read(b);//读取数据并存放到b数组中
36
37                 String data = new String(b);//将字节流转为字符串
38
39                 //读取数据解析登陆信息
40                 String logo = data.substring(0,5);//login标志
41                 String name = data.substring(data.indexOf("name")+4,data.indexOf("pass"));//data.indexOf("name")返回n的下标
42                 String pass = data.substring(data.indexOf("pass")+4,data.indexOf("end"));//data.indexOf("name")返回n的下标
43
44                 String msg ="";
45                 if (logo.equals("login")) {//登陆?
46                     if (name.equals("hello")) {
47                         if (pass.equals("123456")) {
48                             msg += "登录成功";
49                         }
50                         else {
51                             msg += "密码错误";
52                         }
53                     }
54                     else {
55                         msg += "用户不存在";
56                     }
57                 }
58                 else {
59                      msg += "输入错误";
60                 }
61
62                 out.write(msg.getBytes());//将字符串转为字节数组发送到客户端
63                 out.flush();
64
65             }
66         } catch (IOException e) {
67
68             e.printStackTrace();
69
70         }finally {
71
72             //g关闭流和套接字
73             try {
74
75                 in.close();
76                 out.close();
77                 socket.close();
78
79             } catch (IOException e) {
80
81                 e.printStackTrace();
82
83             }
84         }
85     }
86 }
  • TCP客户端


 1 import java.io.IOException;
 2 import java.io.InputStream;
 3 import java.io.OutputStream;
 4 import java.net.Socket;
 5 import java.util.Scanner;
 6
 7 public class MyClient {
 8
 9     public static void main(String[] args) {
10
11         Socket socket = null;
12         InputStream in = null;
13         OutputStream out = null;
14
15         try {
16             //1.创建通信套接字,并绑定IP和PORT
17             socket = new Socket("127.0.0.1", 9999);//127.0.0.1 B/C都在
18
19             //2.获取输入输出流
20             in = socket.getInputStream();
21             out = socket.getOutputStream();
22
23             Scanner input = new Scanner(System.in);//从控制台获取数据
24
25             while(true) {//循环发送和接收消息
26
27                 String msg = input.next();
28
29                 //fa
30                 out.write(msg.getBytes());
31                 out.flush();
32
33                 //收
34                 byte []b = new byte[32];
35                 in.read(b);
36                 String data = new String(b);
37                 System.out.println(data.trim());//装不满时去空隔
38
39             }
40
41
42         } catch (IOException e) {
43             e.printStackTrace();
44         }finally {
45             try {
46                 out.close();
47                 in.close();
48                 socket.close();
49             } catch (IOException e) {
50                 e.printStackTrace();
51             }
52
53         }
54
55
56     }
57 }
  • 运行效果

  1. 运行服务端

  1. 运行客户端后服务器获得信息

  1. 客户端操作以及对应的服务端响应结果

原文地址:https://www.cnblogs.com/ynhwl/p/9434152.html

时间: 2024-08-26 14:39:45

TCP服务器和客户端_Socket编程的相关文章

python socket之tcp服务器与客户端demo

python socket之tcp服务器与客户端demo 作者:vpoet 日期:夏季 server: # -*- coding: cp936 -*- ''' 建立一个python server,监听指定端口, 如果该端口被远程连接访问,则获取远程连接,然后接收数据, 并且做出相应反馈. ''' import socket if __name__=="__main__": print "Server is starting" sock = socket.socket

一个TCP服务器和客户端示例-网络编程

创建了一个TCP时间戳服务器,并创建了对应的客户端程序,两者的通信都在同一台PC上实现(手边只有一台笔记本,sorry...) 1.TCP 服务器 简单解释一下: 利用最基本的socket模块实现, 总体的效果是客户端发送消息,服务器端对消息打上时间戳,并发送回客户端: HOST为空,也即默认为本机: TCP的套接字家族名称为AF_INET,套接字类型为SOCK_STREAM; 利用bind方法绑定地址,listen方法进行监听: while循环模拟了真实的服务器工作场景,也即永不停机的进行监听

【卷二】TCP服务器与客户端

经过上回简单地介绍,大家对服务器多少应该清楚一些了吧!还记得TCP: (Transmission Control Protocol) 传输控制协议? 还记得IP: (Internet Protocol)因特网协议, IPv4, IPv6? 如有不清楚,还请回去补充下概念...... 传送门: http://www.cnblogs.com/Ruby517/p/5808224.html 参考: <Python核心编程(3rd)> P51 ~ P57 ------------------------

python写一些简单的tcp服务器和客户端

代码贴上,做个记录 TcpClient # -*- coding:utf-8 -*- import socket target_host = "127.0.0.1" #服务器端地址 target_port = 5555 #与服务器的端口号一致 while True: client = socket.socket(socket.AF_INET,socket.SOCK_STREAM) client.connect((target_host,target_port)) #data存储要发送的

php编写tcp服务器和客户端程序

这是我从别的地方看到的. 1.修改php.ini,打开extension=php_sockets.dll 2.客户端程序 SocketClient.php <?php set_time_limit(0); $host = "127.0.0.1"; $port = 3046; $socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP)or die("Could not create socket\n"); $co

C语言学习之Linux下TCP服务器与客户端的实现

客户端代码如下: #include <stdlib.h> #include <stdio.h> #include <errno.h> #include <string.h> #include <netdb.h> #include <sys/types.h> #include <netinet/in.h> #include <sys/socket.h> #define portnumber 3333 int ma

TCP服务器和客户端

TCP服务端编写:监听一个端口,建立请求后接收数据并且恢复bye,然后关闭连接,继续等待其他客户端连接. 服务器端程序 from socket import * tcp_server = socket(AF_INET,SOCK_STREAM)    #创建socket tcp_server.bind(('', 5001))    #绑定本地IP与端口 tcp_server.listen(5)    #设置最大监听数 client,client_info = tcp_server.accept()

windows下TCP服务器和客户端的实现

服务器 1.初始化 WSAStartup(..) 2.创建Socket s = Socket ( .. ) 3.绑定端口 ret = bind ( ... ) 4.监听 ret = listen ( .. ) 5.接收客户端的连接请求 s_new = accept ( ... )   // 三次握手发生在这个过程 6.收发数据 ret = recv ( .. ) // 阻塞模式, 内存不够存放发送的信息时,则阻塞send() // 非阻塞 , 视缓冲空间大小而发送相应大的数据,不阻塞send()

使用Python的socket模块搭建tcp服务器与客户端

# __author__ = 'ZSnail' # socket就是一个网络通讯协议 # 服务器端 import socket server = socket.socket() server.bind(('127.0.1.1', 6969)) # 绑定要监听的端口 server.listen() # 监听 print('开始等??') # 在这里会形成阻塞,一直等到有客户连接 # conn就是客户端连过来而在服务器内生成的一个连接实例 conn, address = server.accept(