?? hw_tcppacket.cpp
字號:
/*
int
Socket(int family, int type, int protocol)
{
int n;
if ( (n = socket(family, type, protocol)) < 0)
err_sys("socket error");
return (n);
}
*/
#include <netinet/in.h>//IPv4 Socket Address Structure
#include <sys/socket.h>//socket() Function
#include <unistd.h>//fork();close();
//////////////////////////////
#include <cstdlib>
#include <sys/types.h>
#include <netdb.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <cerrno>
#include <iostream>
///////////////////////////////////////
#define BACKLOG 10;
TcpPack::TcpPack()
{
//不知道這個怎么寫
}
TcpPack::~TcpPack()
{
//這個也不知道
}
//TcpPack::ServInit(char* serv_ip, char* serv_port)本來這么寫,但改為無參形式
//這個函數(shù)用于初始化server,包括socket(),bind(),listen();
int TcpPack::ServInit()
{
//int socket (int family, int type, int protocol);
if((sockfd_s=socket (AF_INET, SOCK_STREAM, 0))<0)//三個參數(shù)全部是定值
{
err_sys("socket error");
exit(1);
}
//初始化socket地址
//int bind (int sockfd, const struct sockaddr *myaddr, socklen_t addrlen);
servaddr.sin_family = AF_INET;//類型
servaddr.sin_port = 0;//端口號=0,表示由kernel指定
servaddr.sin_addr.s_addr = htonl(INADDR_ANY) ;//任意
socklen_t len = sizeof(servaddr)
bzero(&servaddr, sizeof(servaddr));//使用socket地址之前一定要清0;
//將socket綁到一個地址上,在server端,這個地址以及端口號都交由kernel指定;
if( (int bn = bind (sockfd_s, (struct sockaddr*)&servaddr, len) <0)
{
err_sys("socket error");
return (bn);
}
//int listen (int sockfd, int backlog);
if((int ln = listen (sockfd, BACKLOG))<0)
{
err_sys ("listen error");
return (ln);
}
//這里會顯示一下server被分配到的ip地址和端口號
//int getsockname(int sockfd, struct sockaddr *localaddr, socklen_t *addrlen);
if( (getsockname(sockfd_s, (struct sockaddr*)&tempaddr, &len))<0)
{
err_sys(" getsockname() error ");
return (-1);
}
/*
const char *inet_ntop(int af, const void *src, char *dst, size_t cnt);
Return pointer to result or NULL on error
*/
//const inet_ntop(AF_INET, ip_str, &tempaddr.sin_addr);
cout<<" the address we are listening is: "<<ntohl(tempaddr.sinport)<<endl;
//
return 0;
}
//client端初始化函數(shù)只有socket();
int TcpPack:: ClieInit()
{
if((sockfd_c=socket (AF_INET, SOCK_STREAM, 0))<0)//三個參數(shù)全部是定值
{
err_sys("socket error");
exit(1);
}
}
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -