方法/步骤
1
1.服务器端的代码:
void
SocketServer::CreateConnect(){ std::cout<<"start Create
Socket!"<
portnumber=4321; if((m_nSocket=socket(AF_INET,SOCK_STREAM,0))==-1)
{ std::cout<<"socket Create
Failed!"<
sockaddr_in)); server_addr.sin_family=AF_INET;
server_addr.sin_addr.s_addr=inet_addr("127.0.0.1");
server_addr.sin_port=htons(portnumber); /* 捆绑sockfd描述符 */
if(bind(m_nSocket,(struct sockaddr *)(&server_addr),sizeof(struct
sockaddr))==-1) { std::cout<<"Server Bind
Failed!"<
std::cout<<"Listen
Failed!"<
std::cout<<"listen start..."<
if((nNewFd=accept(m_nSocket,(struct sockaddr
*)(&client_addr),&(nSize))) == -1) {
std::cout<<"accept
Failed!"<
from:"<
len = recv( nNewFd, buf, 256, 0) ; if ( len > 0)
std::cout<<"接受的消息为:"<
std::cout<<"错误为:"<
std::cout<<"客户端断开:"<
/* 循环下一个 */ }}
2
2.客户端代码:
//
创建链接void SocketClient::CreateConnect(){ char buffer[1024]; struct
sockaddr_in server_addr; std::cout<<"socket create
start!"<
std::cout<<"Client socket Create
Failed!!"<
bzero(&server_addr,sizeof(server_addr));
server_addr.sin_family=AF_INET;
server_addr.sin_port=htons(portnumber);
server_addr.sin_addr.s_addr=inet_addr("127.0.0.1"); /*
客户程序发起连接请求 */ if(connect(m_nSocket,(struct sockaddr
*)(&server_addr),sizeof(struct sockaddr))==-1) {
std::cout<<"Client connect
Fialed!"<
std::cout<<"starting....!"<
str.length(), 0) ; if ( len < 0) {
std::cout<<"消息发送失败"<
3
3.编译完成后,启动服务器端代码和客户端代码就可以进行通信了。
4
4.
普及一下TCP/IP协议的部分知识,大家都知道TCP是面向链接的协议,即在进行通信前服务器是被动链接,客户端是主动链接,那么客户端与服务器端的连
接需要经过三次握手才能建立链接。在整个通信过程中客户端与服务器端的进行的通信都有确认机制,保证包能顺利的到达对方,但这也不是100%,中间的路由
等中间桥出现问题,也有可能造成数据包的丢失,而任何一方没有收到确认包,都会一直处于等待和重传的过程中...
服务器:
创建socket->bind->listen->recv(send)->close
客户端:
创建socket->connect->recv(send)->close