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 1BỘ 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 2Socket 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 3LỜ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 51 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 6PHẦ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 7Tì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 8Lập trình Socket với TCP
b UDP
Trang 9Tì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 11Tì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 12c 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 13Tì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 14int 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 15Tì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 16cout<<"\nLang nghe that bai";
Trang 17Tì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 19Tì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 21Tìm hiểu về lập trình socket với TCP/UDP GVHD: LÊ MINH HUÂN