1. Trang chủ
  2. » Giáo Dục - Đào Tạo

tìm hiểu về lập trình socket với tcp udp

21 459 0

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 21
Dung lượng 156 KB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

Socket là một cổng logic mà một chương trình sử dụng để kết nối với một chươngtrình khác chạy trên một máy tính khác trên Internet.. Chương trình mạng có thể sửdụng nhiều Socket cùng một

Trang 1

BỘ CÔNG THƯƠNG TRƯỜNG CAO ĐẲNG KĨ THUẬT CAO THẮNG

KHOA: ĐIỆN TỬ – TIN HỌC

ĐỒ ÁN: HỆ THỐNG MẠNG TÌM HIỂU VỀ LẬP TRÌNH SOCKET VỚI

TCP/UDP

Trang 2

Socket là một cổng logic mà một chương trình sử dụng để kết nối với một chươngtrình khác chạy trên một máy tính khác trên Internet Chương trình mạng có thể sửdụng nhiều Socket cùng một lúc, nhờ đó nhiều chương trình có thể sử dụng Internetcùng một lúc

Có 2 loại Socket:

 Stream Socket

 Datagram Socket

Trang 3

LỜI CẢM ƠN

Trong suốt những ngày vừa qua, từ khi nhóm chúng em đựoc giao đề tài,nhómchúng em đã học đựơc rất nhiều kiến thức do các thấy cô khoa Điện Tử - Tin Học nóiriêng cùng toàn thể các thấy cô giáo trong trường nói chung đã tận tình chỉ bảo và giúp

đỡ chúng em nói chung và nhóm em nói riêng Đặc biệt nhóm chúng em xin bày tỏ

lòng biết ơn sâu sắc đến thầy giáo Lương Minh Huấn chủ nhiệm bộ môn “Dich Vụ Mạng” đã hết lòng chỉ bảo và hướng dẫn và tạo điều kiện cho chúng em tìm tòi và học

hỏi với đề taì “tìm hiểu về lập trình socket với tcp/udp”có thể nói đây là nhịp cầu

nối giữa quá trình học tập và rèn luyện thực tế đối với nhóm em và cùng toàn thể cácbạn sinh viên nói chung Nhưng do kiến thức còn hạn hẹp của một nhóm sinh viên mớibước vào ngưỡng cửa của kiến thức CNTT, báo cáo này không thể tránh những sai sót

và khuyết điểm Em mong nhận được những ý kiến quý báu của các thầy cô và đặc biệt

là thầy giáo bộ môn, để chúng em hoàn thành báo cáo

Một lần nữa em muốn gửi đến thầy giáo chủ nhiệm bộ môn Hệ Thống Mạng lời

cảm ơn chân thành nhất

Trang 4

MỤC LỤC

Trang 5

1 Socket là gì 6

PHẦN II LẬP TRÌNH SOCKET 7

1 Cơ chế gọi hàm trong lập trình Socket 7 a TCP 7

b UDP 8

2 Thư viện lập trình Winsock 9 a Khởi động và đóng thư viện 9

b Window socket 10

c TCP 12

d Đóng socket 14

Trang 6

PHẦN I: KHÁI NIỆM VỀ SOCKET

Trước khi đi vào lập trình socket thì chúng ta cần quen với các khái niệm cơ bản trong lập trình socket.

1 Socket là gì

Socket là một cổng logic mà một chương trình sử dụng để kết nối với mộtchương trình khác chạy trên một máy tính khác trên Internet Chương trìnhmạng có thể sử dụng nhiều Socket cùng một lúc, nhờ đó nhiều chương trình cóthể sử dụng Internet cùng một lúc

Có 2 loại Socket:

 Stream Socket: Dựa trên giao thức TCP( Tranmission Control Protocol) việctruyền dữ liệu chỉ thực hiện giữa 2 quá trình đã thiết lập kết nối Giao thứcnày đảm bảo dữ liệu được truyền đến nơi nhận một cách đáng tin cậy, đúngthứ tự nhờ vào cơ chế quản lý luồng lưu thông trên mạng và cơ chế chống tắcnghẽn

 Datagram Socket: Dựa trên giao thức UDP( User Datagram Protocol) việctruyền dữ liệu không yêu cầu có sự thiết lập kết nối giữa 2 quá trình.Ngược lại với giao thức TCP thì dữ liệu được truyền theo giao thức UDPkhông được tin cậy, có thế không đúng trình tự và lặp lại Tuy nhiên vì nókhông yêu cầu thiết lập kết nối không phải có những cơ chế phức tạp nên tốc

độ nhanh…ứng dụng cho các ứng dụng truyền dữ liệu nhanh như chat,game…

Trang 7

Tìm hiểu về lập trình socket với TCP/UDP GVHD: LÊ MINH HUÂN

mạng dựa vảo IP là để xác định máy một máy trên mạng còn port xác định 1tiến trình trên 1 máy

3 Ứng dụng client – server là gì

Trước tới giờ, các bạn lập trình với mục đích là tạo ra được một ứng dụng.Nhưng ứng dụng đó chỉ hoạt động độc lập 1 mình riêng lẽ Mục tiêu lập trìnhmạng sẽ đưa ra những ứng dụng dạng Client – Server Tức là sẽ có 2 loại ứngdụng chính đó là Client và Server

Quy trình hoạt động của ứng dụng Server – Client như sau: Server có nhiệm

vụ của là lắng nghe, chờ đợi kết nối từ Client trên địa chỉ IP của mình với PORT được quy định sẵn Khi client gởi dữ liệu tới Server thì nó phảigiải quyết một công việc là nhận dữ liệu đó -> xử lý -> trả kết quả lại cho Client.

Client là ứng dụng được phục vụ, nó chỉ gởi truy vấn và chờ đợi kết quả từServer

PHẦN II LẬP TRÌNH SOCKET

1. Cơ chế gọi hàm trong lập trình Socket

a TCP

Trang 8

Lập trình Socket với TCP

b UDP

Trang 9

Tìm hiểu về lập trình socket với TCP/UDP GVHD: LÊ MINH HUÂN

Lập trình Socket với UDP

2. Thư viện lập trình Winsock

WinSock API (Windows Sockets Application Programming Interface) là thưviện các hàm giao diện lập trình mạng cho Microsoft Windows WinSock tươngthích với họ nghi thức mạng TCP/IP.Ở phần này chúng ta sẽ làm quen với cáchàm để lập trình socket

a Khởi động và đóng thư viện

Trang 10

 lpWSData là một số thông tin bổ sung sẽ được trả về sau khi gọikhởi tạo Winsock

Đóng thư viện Winsock

Hàm lấy tên máy mình

int gethostname(char* name, int namelen);

Hàm lấy thông tin theo tên máy

truct hostent* FsAR gethostbyname(const char* name);

Trang 11

Tìm hiểu về lập trình socket với TCP/UDP GVHD: LÊ MINH HUÂN

Các tham số

• name: [in] tên của máy tính cần phân giải.

• Một cấu trúc HOSTENT, nếu thành công

• NULL, nếu có lỗi

Trong đó hostent đc định nghĩa

typedef struct hostent {

char FAR* h_name; // Tên máy tính

char FAR FAR** h_aliases; // Bí danh máy tính

short h_addrtype; // Kiểu IP (AF_INET)

short h_length; // Kích thước IP

char FAR FAR** h_addr_list; // Danh sách các địa chỉ IP

// 1 host có thể có 1 hoặc nhiều IP

} HOSTENT,

Lấy thông tin khi biết địa chỉ IP

hostent* FAR gethostbyaddr(const char* addr, int len, int type);

• addr: [in] địa chỉ của máy tính theo thứ tự network-byte.

• len: [in] chiều dài của chuỗi địa chỉ

• type: [in] kiểu của địa chỉ, được thiết lập là AF_INET

• Một cấu trúc HOSTENT, nếu thành công

• NULL, nếu có lỗi

Trang 12

c TCP

Gắn địa chỉ cho socket

int bind( SOCKET s, const struct sockaddr FAR* name, int namelen )

• s: [in] socket chưa được gắn kết địa chỉ.

• name: [in] địa chỉ được gán cho socket, một cấu trúc SOCKADDR.

• namelen: [in] kích thước của giá trị tham số name.

• s: [in] socket đã được gắn địa chỉ nhưng chưa kết nối.

• backlog: [in] kích thước tối đa của hàng đợi thiết lập kết nối Giá trị tối đa được chỉ định bằng hằng số SOMAXCONN.

Trang 13

Tìm hiểu về lập trình socket với TCP/UDP GVHD: LÊ MINH HUÂN

• addrlen: [out] chiều dài thực sự của addr Phải khởi tạo giá trị ban đầu là kích thước của addr.

• Một SOCKET để giao tiếp thực sự với client, nếu thành công

• INVALID_SOCKET, nếu có lỗi.

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

int connect( SOCKET s, const struct sockaddr FAR* name, int namelen )

• s: [in] socket chưa kết nối.

• name: [in] socket cần kết nối đến.

• namelen: [in] kích thước của name.

• s: [in] socket đã kết nối.

• buf: [in] vùng đệm chứa dữ liệu cần gửi.

• len: [in] chiều dài dữ liệu trong buf.

• flags: [in] chỉ định cách thức truyền dữ liệu, truyền dữ liệu bình thường, thiết lập giá trị 0.

• số byte đã gửi đi, nếu thành công

• SOCKET_ERROR, nếu có lỗi.

Nhận dữ liệu

Trang 14

int recv( SOCKET s, char FAR* buf, int len, int flags )

• s: [in] socket đã kết nối.

• buf: [out] vùng đệm để lưu dữ liệu nhận.

• len: [in] kích thước vùng đệm buf.

• flags: [in] chỉ định cách thức nhận dữ liệu, nhận dữ liệu bình thường, thiết lập giá trị 0.

• số byte dữ liệu nhận được, nếu thành công

• SOCKET_ERROR, nếu có lỗi

Shutdown

int shutdown( SOCKET s, int how )

• s: [in] socket cần shutdown.

• how: [in] chỉ định những loại thao tác nào không thực hiện nữa.

- SD_RECEIVE: không cho phép gọi các hàm recv() trên socket.

- SD_SEND: không cho phép gọi các hàm send() trên socket.

- SD_BOTH: không cho phép gọi cả send() và recv() trên socket.

Trang 15

Tìm hiểu về lập trình socket với TCP/UDP GVHD: LÊ MINH HUÂN

#pragma comment (lib,"ws2_32.lib")

int _tmain(int argc, _TCHAR* argv[])

Trang 16

cout<<"\nLang nghe that bai";

Trang 17

Tìm hiểu về lập trình socket với TCP/UDP GVHD: LÊ MINH HUÂN

cout<<"\nKet noi thanh cong !";

cout<<"\nNhan ket noi voi Client coIP: "<<inet_ntoa(severAddr.sin_addr);

cout<<"\nBAT DAU NOI CHUYEN VOINHAU";

Trang 18

#pragma comment (lib,"ws2_32.lib")

int _tmain(int argc, _TCHAR* argv[])

{

WSADATA SInfo;

int iResult = WSAStartup(0x0202,&SInfo);

//Thiet lap IP client

//Lay thong tin may chu qua ten

cout<<"Enter host name : ";

cin.getline(hostName,256);

serverHostent=gethostbyname(hostName);

Trang 19

Tìm hiểu về lập trình socket với TCP/UDP GVHD: LÊ MINH HUÂN

//Yeu cau ket noi

(sockaddr*)&clientAddr,sizeof(clientAddr))==0)

{

cout<<"\nKet noi thanh cong !";

cout<<"\nNhan ket noi voi may chu co IP:

Trang 21

Tìm hiểu về lập trình socket với TCP/UDP GVHD: LÊ MINH HUÂN

Ngày đăng: 18/11/2017, 20:29

TỪ KHÓA LIÊN QUAN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

w