SlideShare uma empresa Scribd logo
1 de 40
Baixar para ler offline
LẬP TRÌNH
             SOCKET
Khoa Mạng máy tính & Truyền thông
  - Đại học Công nghệ Thông tin -


                                1
Nội dung

 Giới thiệu lập trình socket
 TCP/IP
 Socket và TCP/IP
 Lập trình Winsock
 Cấu trúc chương trình ứng dụng
 Sử dụng IDE: Visual C++
 Tổng kết

                                  2
Ký hiệu viết tắt

 IPC: InterProcess Communication
 BSD: Berkeley Software Distribution
 TCP: Transmission Control Protocol
 UDP: User Datagram Protocol
 IP: Internet Protocol



                                       3
Giới thiệu về Sockets

 Socket là một trong những kỹ thuật cơ bản nhất
 trong truyền thông trên mạng máy tính
 Socket là một phương thức thực hiện truyền
 thông giữa các tiến trình được BSD đề xuất.
 Socket được sử dụng để một tiến trình “nói
 chuyện” với một tiến trình khác.
 Nhiều ứng dụng thông dụng hiện nay sử dụng
 kỹ thuật socket như: trình duyệt web, email
 client, …

                                                  4
Socket API
 Giao diện lập trình socket trên Windows,
 winsock, là một đặc tả của nhiều hãng phần
 mềm nhằm chuẩn hóa cách thức sử dụng
 TCP/IP trên Windows. Socket API dựa trên nền
 Berkeley socket.
 Trong BSD Unix, socket là một phần trong
 kernel của hệ điều hành. Nó cung cấp các dịch
 vụ IPC cục bộ hoặc giữa các tiến trình trên
 mạng
 Trong MS-DOS, Windows, MacOS và OS/2,
 sockets được cung cấp dưới dạng các thư viện
 lập trình.                                    5
Các loại socket

 Stream socket: TCP socket
 Datagram socket: UDP socket
 Raw socket: IP socket




                               6
TCP/IP (1)

 TCP/IP là một bộ giao thức, được xây dựng dựa
 trên kỹ thuật “phi kết nối”. Dữ liệu được truyền
 theo từng dãy các gói tin đơn lẻ.
 TCP được sử dụng cho các dịch vụ với khả
 năng truyền dữ liệu lớn và một kết nối liên tục
 UDP thường được sử dụng cho các thao tác tìm
 kiếm nhanh hay các truy vấn đơn lẻ



                                                7
TCP/IP (2)
 Thông thường, các ứng dụng TCP/IP sử dụng 4
 lớp:
   Một giao thức ứng dụng, chẳng hạn như email, ftp
   hay www
   Một giao thức cung cấp các dịch vụ cần thiết cho
   các ứng dụng, chẳng hạn như TCP/UDP
   IP cung cấp dịch vụ cơ bản chuyển giao các gói tin
   đến đúng địa chỉ đích
   Các giao thức cần thiết để quản lý phương tiện
   truyền dẫn vật lý, chẳng hạn như Ethernet hay một
   đường nối điểm – điểm
                                                        8
So sánh OSI với TCP/IP

 5-7. Application         User Application

   4. Transport     TCP                  UDP


   3. Network                  IP

 1-2. Data Link /    Hardware Interface
      Physical

                                               Network

                                                         9
TCP

Hướng kết nối
Đảm bảo độ tin cậy trong quá trình truyền dữ
liệu
Phân đoạn dữ liệu truyền thành các gói tin đơn
lẻ
Dữ liệu truyền được đánh số thứ tự
Cung cấp cơ chế phản hồi sau khi nhận được
dữ liệu
Sử dụng cơ chế phát hiện lỗi checksums
                                                 10
UDP

Phi kết nối
Không phân đoạn dữ liệu truyền
Không cung cấp cơ chế tập hợp dữ liệu nhận
cũng như đồng bộ quá trình truyền nhận dữ liệu
Nếu có lỗi xảy ra, ứng dụng bắt buộc phải thực
hiện truyền lại dữ liệu
Không có cơ chế phản hồi sau khi nhận dữ liệu


                                             11
Các ví dụ về TCP / UDP
     Dịch vụ          Giao thức   Cổng dịch vụ
DNS lookup              UDP            53
FTP                      TCP           21
HTTP                     TCP           80
POP3                     TCP          110
Windows shared          UDP           137
printer name lookup
Telnet                  TCP           23


                                            12
Sockets
 Khi được tạo ra, một socket không có những
 thông tin chỉ định cách thức hoạt động
 Bộ giao thức TCP/IP sẽ định nghĩa một điểm kết
 nối trên socket, gồm có một địa chỉ IP và một số
 hiệu cổng dịch vụ




                                                13
Địa chỉ socket

 Địa chỉ của một socket trên mạng TCP/IP gồm
 có hai phần:
   Địa chỉ IP: một số nguyên 32 bits xác định duy nhất
   một card mạng trên máy tính (host)
   Cổng dịch vụ: một số nguyên 16 bits xác định điểm
   kết nối với một ứng dụng trên một host. Các ứng
   dụng thương mại hay các dịch vụ thông dụng sử
   dụng các cổng dịch vụ chuẩn đã được đăng ký.



                                                     14
Passive/Active Socket

 Passive socket được sử dụng ở chương trình
 server để chờ nhận các kết nối đến từ client
 Active socket được sử dụng ở chương trình
 client để thiết lập kết nối đến chương trình
 server




                                                15
Giao thức hướng kết nối (1)

 Các giao thức dựa trên phiên làm việc hay sự
 chuyển giao các gói tin có thứ tự
 Cung cấp dịch vụ kết nối hai chiều tin cậy dựa
 trên một phiên làm việc
 Các gói tin được đánh số thứ tự duy nhất
 Từng gói tin chuyển giao được xác nhận
 truyền/nhận thành công
 Các gói tin nhận trùng lắp được phát hiện và loại
 bỏ
                                                16
Giao thức hướng kết nối (2)

 Các giao thức hướng kết nối hoạt động theo ba
 giai đoạn
   Thiết lập kết nối: hai tiến trình truyền/nhận thiết lập
   kết nối và thống nhất các tham số định nghĩa kết
   nối
   Truyền nhận dữ liệu: hai tiến trình truyền nhận dữ
   liệu dựa trên kết nối đã được thiết lập
   Giải phóng kết nối: kết nối giữa hai tiến trình được
   giải phóng

                                                         17
TCP Connection
                   connection request
   Tiến trình                            Tiến trình
     Client                               Server


                  Thiết lập kết nối




   Tiến trình                           Tiến trình
     Client                              Server
                     connection


                Truyền nhận dữ liệu
                                                      18
Giao thức phi kết nối (1)
 Đơn giản, nhưng không tin cậy. Không cung cấp
 cơ chế điều khiển đường truyền dựa trên việc
 đánh số thứ tự dữ liệu truyền hoặc cơ chế xác
 nhận
 Cung cấp tính năng broadcast thông tin
 Dữ liệu được truyền/nhận theo từng gói tin đơn
 lẻ: datagram hay packet.
 Một datagram là một thông điệp độc lập được
 gửi qua mạng -- không được đảm bảo đến đích,
 thời điểm đến đích và nội dung thông điệp
                                             19
Giao thức phi kết nối (2)

 Thích hợp cho các ứng dụng broadcast
 Được sử dụng trong các môi trường không xác
 định được host nhận dữ liệu
 Khả năng truyền thông điệp nhanh -- sử dụng
 trong các ứng dụng không quan tâm đến việc
 dữ liệu được truyền đến đích đúng và đủ




                                               20
Lập trình Winsock (1)
   Server Process                           Server Process

    socket()

      bind()                                    socket()

     listen()                                                      UDP
                           TCP                    bind()

    accept()
                                               recvfrom()
                           Client Process                          Client Process
get a blocked client
                            socket()        get a blocked client    socket()
                       1
      recv()
                           connect()                                 bind()
                       2                     process request
 process request
                             send()                                 sendto()
                       3                        sendto()
     send()                  recv()                                recvfrom()
                                                                          21
Lập trình Winsock (2)
 Thư viện
   winsock2.h
 Kiểu dữ liệu
   WSADATA
   SOCKADDR_IN
   LPSOCKADDR
 Các giá trị hằng số
   AF_INET
   SOCK_STREAM / SOCK_DGRAM
   INVALID_SOCKET
   SOCKET_ERROR
                              22
TCP Client

 Xác định địa chỉ IP và cổng dịch vụ ở server
 Tạo một socket với cổng dịch vụ cục bộ bất kỳ
 do TCP chỉ định
 Kết nối socket đến server
 Gửi yêu cầu và nhận thông tin phản hồi từ
 server
 Đóng kết nối


                                                 23
Lập trình: TCPClient (1)

void main()
{
   /* Khai báo biến */
   WSADATA wsaData;
   SOCKADDR_IN rAddr;
   char buffer[20];
   int iRc;

  /* Nạp thư viện và khởi tạo socket */
  iRc = WSAStartup(MAKEWORD(2, 2), &wsaData);
  SOCKET sk = socket(AF_INET, SOCK_STREAM, 0);




                                                 24
Lập trình: TCPClient (2)
  /* Kết nối đến Server */
  rAddr.sin_family = AF_INET;
  rAddr.sin_addr.s_addr = inet_addr("127.0.0.1");
  rAddr.sin_port = htons(1024);
  iRc = connect(sk, (LPSOCKADDR)&rAddr, sizeof(rAddr));

  /* Nhận và gửi thông điệp */
  printf("Message: ");
  gets(buffer);
  iRc = send(sk, buffer, strlen(buffer), 0);

    /* Đóng socket và giải phóng tài nguyên */
    closesocket(sk);
    WSACleanup();
                                                     25
} // end of main function
TCP Server
 Tạo một socket và gán cho socket một địa chỉ cố
 định (IP và port) để cung cấp dịch vụ
 Đặt socket ở chế độ passive
 Chấp nhận yêu cầu thiết lập kết nối từ client và
 nhận socket mới từ hệ thống
 Thực hiện quá trình lặp nhận yêu cầu và gửi
 thông tin phản hồi
 Khi client kết thúc, đóng kết nối và trở về trạng
 thái chờ chấp nhận yêu cầu thiết lập kết nối từ
 các client
                                                26
Lập trình: TCPServer (1)
void main()
{
  /* Khai báo biến */
  WSADATA wsaData;
  SOCKADDR_IN serAddr, cliAddr;
  int iRc;
  int adsize;
  char buffer[256];

  /* Nạp thư viện và khởi tạo socket */
  iRc = WSAStartup(MAKEWORD(2, 2), &wsaData);
  SOCKET ssk = socket(AF_INET, SOCK_STREAM, 0);   27
Lập trình: TCPServer (2)
/* Thiết lập cấu trúc địa chỉ cho socket */
serAddr.sin_family = AF_INET;
serAddr.sin_addr.s_addr = inet_addr("127.0.0.1");
serAddr.sin_port = htons(1024);

/* Gắn địa chỉ cho socket và thực hiện chờ thiết lập kết nối */
iRc = bind(ssk, (LPSOCKADDR)&serAddr, sizeof(serAddr));
iRc = listen(ssk, 5);
adsize=sizeof(cliAddr);
SOCKET sk = accept(ssk, (LPSOCKADDR)&cliAddr, &adsize);


                                                           28
Lập trình: TCPServer (3)
  /* Nhận dữ liệu từ Client */
  iRc = recv(sk, buffer, 256, 0);
  if (iRc == SOCKET_ERROR)
        printf("Could not receive data from server.n");
  else {
        buffer[iRc]=0;
        printf("Message from client: %sn", buffer);
  }

    /* Đóng socket và giải phóng tài nguyên */
    closesocket(sk);
    closesocket(ssk);
    WSACleanup();
} // end of main function                                  29
UDP Client

 Xác định địa chỉ IP và cổng dịch vụ ở server
 Tạo một socket với cổng dịch vụ cục bộ bất kỳ
 do UDP chỉ định
 Chỉ định server cần giao tiếp
 Gửi yêu cầu và nhận thông tin phản hồi từ
 server
 Đóng socket


                                                 30
Lập trình: UDPClient (1)
void main()
{
  /* Khai báo biến */
  WSADATA wsaData;
  SOCKET sk;
  WORD _toPort;
  DWORD _toIP;
  SOCKADDR_IN _toAddr;
  int iRc, adsize;
  char msg[512];

 /* Nạp thư viện và khởi tạo socket */
 iRc = WSAStartup(MAKEWORD(2, 2), &wsaData);
 sk = socket(AF_INET, SOCK_DGRAM, 0);          31
Lập trình: UDPClient (2)
/* Nhận thông điệp cần gửi */
printf("Message: ");
scanf("%s", &msg);

/* Gửi dữ liệu đến server */
_toAddr.sin_family = AF_INET;
_toAddr.sin_port = htons(_toPort);
_toAddr.sin_addr.s_addr = inet_addr(_toIP);
iRc = sendto(sk, msg, strlen(msg), 0,
              (LPSOCKADDR)&_toAddr, sizeof(_toAddr));



                                                        32
Lập trình: UDPClient (3)
    /* Đóng socket và giải phóng tài nguyên */
    closesocket(sk);
    WSACleanup();
} // end of main function




                                                 33
UDP Server

 Tạo một socket và gán cho socket một địa chỉ cố
 định (IP và port) để cung cấp dịch vụ
 Thực hiện quá trình lặp nhận yêu cầu và gửi
 thông tin phản hồi




                                              34
Lập trình: UDPServer (1)

void main()
{
   /* Khai báo biến */
   WSADATA wsaData;
   SOCKET sk;
   SOCKADDR_IN _locAddr, _frAddr;
   int iRc, adsize;
   char msg[512];

  /* Nạp thư viện và khởi tạo socket */
  iRc = WSAStartup(MAKEWORD(2, 2), &wsaData);
  sk = socket(AF_INET, SOCK_DGRAM, 0);



                                                35
Lập trình: UDPServer (2)
/* Gắn địa chỉ cho socket */
_locAddr.sin_family = AF_INET;
_locAddr.sin_port = htons(1024);
_locAddr.sin_addr.s_addr = htonl(INADDR_ANY);
iRc = bind(sk, (LPSOCKADDR)&_locAddr, sizeof(_locAddr));

/* Nhận dữ liệu từ Client */
adsize = sizeof(_frAddr);
iRc = recvfrom(sk, msg, 512, 0,
                    (LPSOCKADDR)&_frAddr, &adsize);

                                                      36
Lập trình: UDPServer (3)

    /* Hiển thị dữ liệu lên màn hình */
    if (iRc == SOCKET_ERROR)
          printf("Could not receive data from server.n");
    else {
          msg[iRc] = 0;
          printf("nMessage from sender: %sn", msg);
    }

    /* Đóng socket và giải phóng tài nguyên */
    closesocket(sk);
    WSACleanup();
}



                                                             37
Visual C++ với Winsock (1)
Include Winsock header:
  Khởi động VC++
  Chọn New > Windows Console Application
  Chọn loại ứng dụng “Hello World”
  Thiết lập vùng cửa sổ trái sang chế độ File View
  Trong mục “Header Files”, mở file StdAfx.h
  Thêm dòng #include <winsock2.h>
  Lưu file StdAfx.h
  Thêm dòng #include “StdAfx.h” trong tập
  tin chương trình                                38
Visual C++ với Winsock (2)
Liên kết thư viện Winsock:
  Chọn Project > Settings trên menu
  Chọn tab Link
  Thêm wsock32.lib vào ô “Object/Library
  modules”

 Để xác định lỗi trong chương trình, sử dụng hàm
 WSAGetLastError()
    Ví dụ: với lỗi 10037, sử dụng lệnh:
      net helpmsg 10037
                                              39
Tổng kết

 Socket và bộ giao thức TCP/IP
 Lập trình Winsock: cấu trúc chương trình,
 thư viện sử dụng, IDE
 Viết các chương trình ứng dụng sử dụng
 socket, với hai giao thức TCP và UDP




                                         40

Mais conteúdo relacionado

Mais procurados

De cuongthuchanhct221 hk2_1920_n1
De cuongthuchanhct221 hk2_1920_n1De cuongthuchanhct221 hk2_1920_n1
De cuongthuchanhct221 hk2_1920_n1Nahudi Nguyễn
 
[Java] Khái niệm về RMI trong Java và cách sử dụng RMI
[Java] Khái niệm về RMI trong Java và cách sử dụng RMI[Java] Khái niệm về RMI trong Java và cách sử dụng RMI
[Java] Khái niệm về RMI trong Java và cách sử dụng RMITí Bụng Bự
 
Lập trình phân tích bắt gói tin mạng bằng Python
Lập trình phân tích bắt gói tin mạng bằng PythonLập trình phân tích bắt gói tin mạng bằng Python
Lập trình phân tích bắt gói tin mạng bằng PythonPhạm Trung Đức
 
Beezo Share - Đồ Án Thực Tập Công Cụ Giám Sát Mạng Python
Beezo Share - Đồ Án Thực Tập Công Cụ Giám Sát Mạng PythonBeezo Share - Đồ Án Thực Tập Công Cụ Giám Sát Mạng Python
Beezo Share - Đồ Án Thực Tập Công Cụ Giám Sát Mạng PythonBeezo
 
Slide về việc bắt gói tin trên Python2.7
Slide về việc bắt gói tin trên Python2.7Slide về việc bắt gói tin trên Python2.7
Slide về việc bắt gói tin trên Python2.7Phạm Trung Đức
 
Chapter 3 cac phuong phap cap nhat thong tin tren web
Chapter 3 cac phuong phap cap nhat thong tin tren webChapter 3 cac phuong phap cap nhat thong tin tren web
Chapter 3 cac phuong phap cap nhat thong tin tren webxuandiencntt
 
Mạng ngang hàng P2P
Mạng ngang hàng P2PMạng ngang hàng P2P
Mạng ngang hàng P2PQuốc Kun
 
Lab security+baiso8 netcat
Lab security+baiso8 netcatLab security+baiso8 netcat
Lab security+baiso8 netcatxeroxk
 
Bao cao-cloud-linux-hosting
Bao cao-cloud-linux-hostingBao cao-cloud-linux-hosting
Bao cao-cloud-linux-hostinglaonap166
 
Lesson 7 - Linux Shell Programming
Lesson 7 - Linux Shell ProgrammingLesson 7 - Linux Shell Programming
Lesson 7 - Linux Shell ProgrammingThang Man
 

Mais procurados (19)

De cuongthuchanhct221 hk2_1920_n1
De cuongthuchanhct221 hk2_1920_n1De cuongthuchanhct221 hk2_1920_n1
De cuongthuchanhct221 hk2_1920_n1
 
[Java] Khái niệm về RMI trong Java và cách sử dụng RMI
[Java] Khái niệm về RMI trong Java và cách sử dụng RMI[Java] Khái niệm về RMI trong Java và cách sử dụng RMI
[Java] Khái niệm về RMI trong Java và cách sử dụng RMI
 
Dsd05 01-rpca
Dsd05 01-rpcaDsd05 01-rpca
Dsd05 01-rpca
 
Dsd02 sta
Dsd02 staDsd02 sta
Dsd02 sta
 
Lập trình phân tích bắt gói tin mạng bằng Python
Lập trình phân tích bắt gói tin mạng bằng PythonLập trình phân tích bắt gói tin mạng bằng Python
Lập trình phân tích bắt gói tin mạng bằng Python
 
Beezo Share - Đồ Án Thực Tập Công Cụ Giám Sát Mạng Python
Beezo Share - Đồ Án Thực Tập Công Cụ Giám Sát Mạng PythonBeezo Share - Đồ Án Thực Tập Công Cụ Giám Sát Mạng Python
Beezo Share - Đồ Án Thực Tập Công Cụ Giám Sát Mạng Python
 
Slide về việc bắt gói tin trên Python2.7
Slide về việc bắt gói tin trên Python2.7Slide về việc bắt gói tin trên Python2.7
Slide về việc bắt gói tin trên Python2.7
 
Bai2 tmdt1
Bai2 tmdt1Bai2 tmdt1
Bai2 tmdt1
 
Dsd03 sta
Dsd03 staDsd03 sta
Dsd03 sta
 
Chapter 3 cac phuong phap cap nhat thong tin tren web
Chapter 3 cac phuong phap cap nhat thong tin tren webChapter 3 cac phuong phap cap nhat thong tin tren web
Chapter 3 cac phuong phap cap nhat thong tin tren web
 
Dsd01 sta
Dsd01 staDsd01 sta
Dsd01 sta
 
Mạng ngang hàng P2P
Mạng ngang hàng P2PMạng ngang hàng P2P
Mạng ngang hàng P2P
 
Lab security+baiso8 netcat
Lab security+baiso8 netcatLab security+baiso8 netcat
Lab security+baiso8 netcat
 
Chuong 1 gt linux
Chuong 1  gt linuxChuong 1  gt linux
Chuong 1 gt linux
 
Bao cao-cloud-linux-hosting
Bao cao-cloud-linux-hostingBao cao-cloud-linux-hosting
Bao cao-cloud-linux-hosting
 
Lesson 7 - Linux Shell Programming
Lesson 7 - Linux Shell ProgrammingLesson 7 - Linux Shell Programming
Lesson 7 - Linux Shell Programming
 
Dsd05 04-05-jmsa
Dsd05 04-05-jmsaDsd05 04-05-jmsa
Dsd05 04-05-jmsa
 
Linux+04
Linux+04Linux+04
Linux+04
 
Linux+01
Linux+01Linux+01
Linux+01
 

Semelhante a Lt socket

Bai giang-Lap trinh he thong-Ch2-Lap trinh Socket.pdf
Bai giang-Lap trinh he thong-Ch2-Lap trinh Socket.pdfBai giang-Lap trinh he thong-Ch2-Lap trinh Socket.pdf
Bai giang-Lap trinh he thong-Ch2-Lap trinh Socket.pdfCanhPhuongVan
 
Tìm Hiểu WLAn, Giao Thức Radius, Mikrotik Router
Tìm Hiểu WLAn, Giao Thức Radius, Mikrotik RouterTìm Hiểu WLAn, Giao Thức Radius, Mikrotik Router
Tìm Hiểu WLAn, Giao Thức Radius, Mikrotik RouterLe Trung Hieu
 
Giao thức ftp, smtp
Giao thức ftp, smtpGiao thức ftp, smtp
Giao thức ftp, smtpLittle April
 
C10 - Routing Remote Access -2020.pdf
C10 - Routing Remote Access -2020.pdfC10 - Routing Remote Access -2020.pdf
C10 - Routing Remote Access -2020.pdfTrnMinhT9
 
Python Beginner Class day-15-networking
Python Beginner Class day-15-networkingPython Beginner Class day-15-networking
Python Beginner Class day-15-networkingKhánh Nguyễn
 
Báo cáo thực tập tuần 6
Báo cáo thực tập tuần 6Báo cáo thực tập tuần 6
Báo cáo thực tập tuần 6Quân Quạt Mo
 
Ch2 coso hatangcua e-commerce
Ch2 coso hatangcua e-commerceCh2 coso hatangcua e-commerce
Ch2 coso hatangcua e-commercetailieumarketing
 
Network 1206754309287969-2
Network 1206754309287969-2Network 1206754309287969-2
Network 1206754309287969-2Tiệu Vây
 
Socket - Lập trình hệ thống
Socket - Lập trình hệ thốngSocket - Lập trình hệ thống
Socket - Lập trình hệ thốngĐông Nguyễn Văn
 
Giới thiệu về Mạng riêng ảo Vitual Private Network
Giới thiệu về Mạng riêng ảo Vitual Private NetworkGiới thiệu về Mạng riêng ảo Vitual Private Network
Giới thiệu về Mạng riêng ảo Vitual Private Networktuanhiep8
 
259973943 xbee-node-temperature-sensor
259973943 xbee-node-temperature-sensor259973943 xbee-node-temperature-sensor
259973943 xbee-node-temperature-sensorDuy Quang Nguyen Ly
 
9849ed58 0205-4740-8040-8c6f33761cb3 computernetworkc1
9849ed58 0205-4740-8040-8c6f33761cb3 computernetworkc19849ed58 0205-4740-8040-8c6f33761cb3 computernetworkc1
9849ed58 0205-4740-8040-8c6f33761cb3 computernetworkc1Theduyet Pham
 

Semelhante a Lt socket (20)

Bai giang-Lap trinh he thong-Ch2-Lap trinh Socket.pdf
Bai giang-Lap trinh he thong-Ch2-Lap trinh Socket.pdfBai giang-Lap trinh he thong-Ch2-Lap trinh Socket.pdf
Bai giang-Lap trinh he thong-Ch2-Lap trinh Socket.pdf
 
Tìm Hiểu WLAn, Giao Thức Radius, Mikrotik Router
Tìm Hiểu WLAn, Giao Thức Radius, Mikrotik RouterTìm Hiểu WLAn, Giao Thức Radius, Mikrotik Router
Tìm Hiểu WLAn, Giao Thức Radius, Mikrotik Router
 
Giao thức ftp, smtp
Giao thức ftp, smtpGiao thức ftp, smtp
Giao thức ftp, smtp
 
C10 - Routing Remote Access -2020.pdf
C10 - Routing Remote Access -2020.pdfC10 - Routing Remote Access -2020.pdf
C10 - Routing Remote Access -2020.pdf
 
Python Beginner Class day-15-networking
Python Beginner Class day-15-networkingPython Beginner Class day-15-networking
Python Beginner Class day-15-networking
 
Báo cáo thực tập tuần 6
Báo cáo thực tập tuần 6Báo cáo thực tập tuần 6
Báo cáo thực tập tuần 6
 
Network
NetworkNetwork
Network
 
Ch2 coso hatangcua e-commerce
Ch2 coso hatangcua e-commerceCh2 coso hatangcua e-commerce
Ch2 coso hatangcua e-commerce
 
Socket
SocketSocket
Socket
 
Network 1206754309287969-2
Network 1206754309287969-2Network 1206754309287969-2
Network 1206754309287969-2
 
Dsd05 02a-xml-rpca
Dsd05 02a-xml-rpcaDsd05 02a-xml-rpca
Dsd05 02a-xml-rpca
 
Socket - Lập trình hệ thống
Socket - Lập trình hệ thốngSocket - Lập trình hệ thống
Socket - Lập trình hệ thống
 
ch01.ppt
ch01.pptch01.ppt
ch01.ppt
 
Bao cao final
Bao cao finalBao cao final
Bao cao final
 
Giới thiệu về Mạng riêng ảo Vitual Private Network
Giới thiệu về Mạng riêng ảo Vitual Private NetworkGiới thiệu về Mạng riêng ảo Vitual Private Network
Giới thiệu về Mạng riêng ảo Vitual Private Network
 
Chương 2.pdf
Chương 2.pdfChương 2.pdf
Chương 2.pdf
 
259973943 xbee-node-temperature-sensor
259973943 xbee-node-temperature-sensor259973943 xbee-node-temperature-sensor
259973943 xbee-node-temperature-sensor
 
9849ed58 0205-4740-8040-8c6f33761cb3 computernetworkc1
9849ed58 0205-4740-8040-8c6f33761cb3 computernetworkc19849ed58 0205-4740-8040-8c6f33761cb3 computernetworkc1
9849ed58 0205-4740-8040-8c6f33761cb3 computernetworkc1
 
Bai 7
Bai 7Bai 7
Bai 7
 
Chương 1.pdf
Chương 1.pdfChương 1.pdf
Chương 1.pdf
 

Lt socket

  • 1. LẬP TRÌNH SOCKET Khoa Mạng máy tính & Truyền thông - Đại học Công nghệ Thông tin - 1
  • 2. Nội dung Giới thiệu lập trình socket TCP/IP Socket và TCP/IP Lập trình Winsock Cấu trúc chương trình ứng dụng Sử dụng IDE: Visual C++ Tổng kết 2
  • 3. Ký hiệu viết tắt IPC: InterProcess Communication BSD: Berkeley Software Distribution TCP: Transmission Control Protocol UDP: User Datagram Protocol IP: Internet Protocol 3
  • 4. Giới thiệu về Sockets Socket là một trong những kỹ thuật cơ bản nhất trong truyền thông trên mạng máy tính Socket là một phương thức thực hiện truyền thông giữa các tiến trình được BSD đề xuất. Socket được sử dụng để một tiến trình “nói chuyện” với một tiến trình khác. Nhiều ứng dụng thông dụng hiện nay sử dụng kỹ thuật socket như: trình duyệt web, email client, … 4
  • 5. Socket API Giao diện lập trình socket trên Windows, winsock, là một đặc tả của nhiều hãng phần mềm nhằm chuẩn hóa cách thức sử dụng TCP/IP trên Windows. Socket API dựa trên nền Berkeley socket. Trong BSD Unix, socket là một phần trong kernel của hệ điều hành. Nó cung cấp các dịch vụ IPC cục bộ hoặc giữa các tiến trình trên mạng Trong MS-DOS, Windows, MacOS và OS/2, sockets được cung cấp dưới dạng các thư viện lập trình. 5
  • 6. Các loại socket Stream socket: TCP socket Datagram socket: UDP socket Raw socket: IP socket 6
  • 7. TCP/IP (1) TCP/IP là một bộ giao thức, được xây dựng dựa trên kỹ thuật “phi kết nối”. Dữ liệu được truyền theo từng dãy các gói tin đơn lẻ. TCP được sử dụng cho các dịch vụ với khả năng truyền dữ liệu lớn và một kết nối liên tục UDP thường được sử dụng cho các thao tác tìm kiếm nhanh hay các truy vấn đơn lẻ 7
  • 8. TCP/IP (2) Thông thường, các ứng dụng TCP/IP sử dụng 4 lớp: Một giao thức ứng dụng, chẳng hạn như email, ftp hay www Một giao thức cung cấp các dịch vụ cần thiết cho các ứng dụng, chẳng hạn như TCP/UDP IP cung cấp dịch vụ cơ bản chuyển giao các gói tin đến đúng địa chỉ đích Các giao thức cần thiết để quản lý phương tiện truyền dẫn vật lý, chẳng hạn như Ethernet hay một đường nối điểm – điểm 8
  • 9. So sánh OSI với TCP/IP 5-7. Application User Application 4. Transport TCP UDP 3. Network IP 1-2. Data Link / Hardware Interface Physical Network 9
  • 10. TCP Hướng kết nối Đảm bảo độ tin cậy trong quá trình truyền dữ liệu Phân đoạn dữ liệu truyền thành các gói tin đơn lẻ Dữ liệu truyền được đánh số thứ tự Cung cấp cơ chế phản hồi sau khi nhận được dữ liệu Sử dụng cơ chế phát hiện lỗi checksums 10
  • 11. UDP Phi kết nối Không phân đoạn dữ liệu truyền Không cung cấp cơ chế tập hợp dữ liệu nhận cũng như đồng bộ quá trình truyền nhận dữ liệu Nếu có lỗi xảy ra, ứng dụng bắt buộc phải thực hiện truyền lại dữ liệu Không có cơ chế phản hồi sau khi nhận dữ liệu 11
  • 12. Các ví dụ về TCP / UDP Dịch vụ Giao thức Cổng dịch vụ DNS lookup UDP 53 FTP TCP 21 HTTP TCP 80 POP3 TCP 110 Windows shared UDP 137 printer name lookup Telnet TCP 23 12
  • 13. Sockets Khi được tạo ra, một socket không có những thông tin chỉ định cách thức hoạt động Bộ giao thức TCP/IP sẽ định nghĩa một điểm kết nối trên socket, gồm có một địa chỉ IP và một số hiệu cổng dịch vụ 13
  • 14. Địa chỉ socket Địa chỉ của một socket trên mạng TCP/IP gồm có hai phần: Địa chỉ IP: một số nguyên 32 bits xác định duy nhất một card mạng trên máy tính (host) Cổng dịch vụ: một số nguyên 16 bits xác định điểm kết nối với một ứng dụng trên một host. Các ứng dụng thương mại hay các dịch vụ thông dụng sử dụng các cổng dịch vụ chuẩn đã được đăng ký. 14
  • 15. Passive/Active Socket Passive socket được sử dụng ở chương trình server để chờ nhận các kết nối đến từ client Active socket được sử dụng ở chương trình client để thiết lập kết nối đến chương trình server 15
  • 16. Giao thức hướng kết nối (1) Các giao thức dựa trên phiên làm việc hay sự chuyển giao các gói tin có thứ tự Cung cấp dịch vụ kết nối hai chiều tin cậy dựa trên một phiên làm việc Các gói tin được đánh số thứ tự duy nhất Từng gói tin chuyển giao được xác nhận truyền/nhận thành công Các gói tin nhận trùng lắp được phát hiện và loại bỏ 16
  • 17. Giao thức hướng kết nối (2) Các giao thức hướng kết nối hoạt động theo ba giai đoạn Thiết lập kết nối: hai tiến trình truyền/nhận thiết lập kết nối và thống nhất các tham số định nghĩa kết nối Truyền nhận dữ liệu: hai tiến trình truyền nhận dữ liệu dựa trên kết nối đã được thiết lập Giải phóng kết nối: kết nối giữa hai tiến trình được giải phóng 17
  • 18. TCP Connection connection request Tiến trình Tiến trình Client Server Thiết lập kết nối Tiến trình Tiến trình Client Server connection Truyền nhận dữ liệu 18
  • 19. Giao thức phi kết nối (1) Đơn giản, nhưng không tin cậy. Không cung cấp cơ chế điều khiển đường truyền dựa trên việc đánh số thứ tự dữ liệu truyền hoặc cơ chế xác nhận Cung cấp tính năng broadcast thông tin Dữ liệu được truyền/nhận theo từng gói tin đơn lẻ: datagram hay packet. Một datagram là một thông điệp độc lập được gửi qua mạng -- không được đảm bảo đến đích, thời điểm đến đích và nội dung thông điệp 19
  • 20. Giao thức phi kết nối (2) Thích hợp cho các ứng dụng broadcast Được sử dụng trong các môi trường không xác định được host nhận dữ liệu Khả năng truyền thông điệp nhanh -- sử dụng trong các ứng dụng không quan tâm đến việc dữ liệu được truyền đến đích đúng và đủ 20
  • 21. Lập trình Winsock (1) Server Process Server Process socket() bind() socket() listen() UDP TCP bind() accept() recvfrom() Client Process Client Process get a blocked client socket() get a blocked client socket() 1 recv() connect() bind() 2 process request process request send() sendto() 3 sendto() send() recv() recvfrom() 21
  • 22. Lập trình Winsock (2) Thư viện winsock2.h Kiểu dữ liệu WSADATA SOCKADDR_IN LPSOCKADDR Các giá trị hằng số AF_INET SOCK_STREAM / SOCK_DGRAM INVALID_SOCKET SOCKET_ERROR 22
  • 23. TCP Client Xác định địa chỉ IP và cổng dịch vụ ở server Tạo một socket với cổng dịch vụ cục bộ bất kỳ do TCP chỉ định Kết nối socket đến server Gửi yêu cầu và nhận thông tin phản hồi từ server Đóng kết nối 23
  • 24. Lập trình: TCPClient (1) void main() { /* Khai báo biến */ WSADATA wsaData; SOCKADDR_IN rAddr; char buffer[20]; int iRc; /* Nạp thư viện và khởi tạo socket */ iRc = WSAStartup(MAKEWORD(2, 2), &wsaData); SOCKET sk = socket(AF_INET, SOCK_STREAM, 0); 24
  • 25. Lập trình: TCPClient (2) /* Kết nối đến Server */ rAddr.sin_family = AF_INET; rAddr.sin_addr.s_addr = inet_addr("127.0.0.1"); rAddr.sin_port = htons(1024); iRc = connect(sk, (LPSOCKADDR)&rAddr, sizeof(rAddr)); /* Nhận và gửi thông điệp */ printf("Message: "); gets(buffer); iRc = send(sk, buffer, strlen(buffer), 0); /* Đóng socket và giải phóng tài nguyên */ closesocket(sk); WSACleanup(); 25 } // end of main function
  • 26. TCP Server Tạo một socket và gán cho socket một địa chỉ cố định (IP và port) để cung cấp dịch vụ Đặt socket ở chế độ passive Chấp nhận yêu cầu thiết lập kết nối từ client và nhận socket mới từ hệ thống Thực hiện quá trình lặp nhận yêu cầu và gửi thông tin phản hồi Khi client kết thúc, đóng kết nối và trở về trạng thái chờ chấp nhận yêu cầu thiết lập kết nối từ các client 26
  • 27. Lập trình: TCPServer (1) void main() { /* Khai báo biến */ WSADATA wsaData; SOCKADDR_IN serAddr, cliAddr; int iRc; int adsize; char buffer[256]; /* Nạp thư viện và khởi tạo socket */ iRc = WSAStartup(MAKEWORD(2, 2), &wsaData); SOCKET ssk = socket(AF_INET, SOCK_STREAM, 0); 27
  • 28. Lập trình: TCPServer (2) /* Thiết lập cấu trúc địa chỉ cho socket */ serAddr.sin_family = AF_INET; serAddr.sin_addr.s_addr = inet_addr("127.0.0.1"); serAddr.sin_port = htons(1024); /* Gắn địa chỉ cho socket và thực hiện chờ thiết lập kết nối */ iRc = bind(ssk, (LPSOCKADDR)&serAddr, sizeof(serAddr)); iRc = listen(ssk, 5); adsize=sizeof(cliAddr); SOCKET sk = accept(ssk, (LPSOCKADDR)&cliAddr, &adsize); 28
  • 29. Lập trình: TCPServer (3) /* Nhận dữ liệu từ Client */ iRc = recv(sk, buffer, 256, 0); if (iRc == SOCKET_ERROR) printf("Could not receive data from server.n"); else { buffer[iRc]=0; printf("Message from client: %sn", buffer); } /* Đóng socket và giải phóng tài nguyên */ closesocket(sk); closesocket(ssk); WSACleanup(); } // end of main function 29
  • 30. UDP Client Xác định địa chỉ IP và cổng dịch vụ ở server Tạo một socket với cổng dịch vụ cục bộ bất kỳ do UDP chỉ định Chỉ định server cần giao tiếp Gửi yêu cầu và nhận thông tin phản hồi từ server Đóng socket 30
  • 31. Lập trình: UDPClient (1) void main() { /* Khai báo biến */ WSADATA wsaData; SOCKET sk; WORD _toPort; DWORD _toIP; SOCKADDR_IN _toAddr; int iRc, adsize; char msg[512]; /* Nạp thư viện và khởi tạo socket */ iRc = WSAStartup(MAKEWORD(2, 2), &wsaData); sk = socket(AF_INET, SOCK_DGRAM, 0); 31
  • 32. Lập trình: UDPClient (2) /* Nhận thông điệp cần gửi */ printf("Message: "); scanf("%s", &msg); /* Gửi dữ liệu đến server */ _toAddr.sin_family = AF_INET; _toAddr.sin_port = htons(_toPort); _toAddr.sin_addr.s_addr = inet_addr(_toIP); iRc = sendto(sk, msg, strlen(msg), 0, (LPSOCKADDR)&_toAddr, sizeof(_toAddr)); 32
  • 33. Lập trình: UDPClient (3) /* Đóng socket và giải phóng tài nguyên */ closesocket(sk); WSACleanup(); } // end of main function 33
  • 34. UDP Server Tạo một socket và gán cho socket một địa chỉ cố định (IP và port) để cung cấp dịch vụ Thực hiện quá trình lặp nhận yêu cầu và gửi thông tin phản hồi 34
  • 35. Lập trình: UDPServer (1) void main() { /* Khai báo biến */ WSADATA wsaData; SOCKET sk; SOCKADDR_IN _locAddr, _frAddr; int iRc, adsize; char msg[512]; /* Nạp thư viện và khởi tạo socket */ iRc = WSAStartup(MAKEWORD(2, 2), &wsaData); sk = socket(AF_INET, SOCK_DGRAM, 0); 35
  • 36. Lập trình: UDPServer (2) /* Gắn địa chỉ cho socket */ _locAddr.sin_family = AF_INET; _locAddr.sin_port = htons(1024); _locAddr.sin_addr.s_addr = htonl(INADDR_ANY); iRc = bind(sk, (LPSOCKADDR)&_locAddr, sizeof(_locAddr)); /* Nhận dữ liệu từ Client */ adsize = sizeof(_frAddr); iRc = recvfrom(sk, msg, 512, 0, (LPSOCKADDR)&_frAddr, &adsize); 36
  • 37. Lập trình: UDPServer (3) /* Hiển thị dữ liệu lên màn hình */ if (iRc == SOCKET_ERROR) printf("Could not receive data from server.n"); else { msg[iRc] = 0; printf("nMessage from sender: %sn", msg); } /* Đóng socket và giải phóng tài nguyên */ closesocket(sk); WSACleanup(); } 37
  • 38. Visual C++ với Winsock (1) Include Winsock header: Khởi động VC++ Chọn New > Windows Console Application Chọn loại ứng dụng “Hello World” Thiết lập vùng cửa sổ trái sang chế độ File View Trong mục “Header Files”, mở file StdAfx.h Thêm dòng #include <winsock2.h> Lưu file StdAfx.h Thêm dòng #include “StdAfx.h” trong tập tin chương trình 38
  • 39. Visual C++ với Winsock (2) Liên kết thư viện Winsock: Chọn Project > Settings trên menu Chọn tab Link Thêm wsock32.lib vào ô “Object/Library modules” Để xác định lỗi trong chương trình, sử dụng hàm WSAGetLastError() Ví dụ: với lỗi 10037, sử dụng lệnh: net helpmsg 10037 39
  • 40. Tổng kết Socket và bộ giao thức TCP/IP Lập trình Winsock: cấu trúc chương trình, thư viện sử dụng, IDE Viết các chương trình ứng dụng sử dụng socket, với hai giao thức TCP và UDP 40