如何实现服务端与客户端的socket通讯,以正

 我来答
百度网友10a24bf
2017-12-22 · TA获得超过1.3万个赞
知道大有可为答主
回答量:1.3万
采纳率:95%
帮助的人:3120万
展开全部
  • 网络的Socket数据传输是一种特殊的I/O,Socket也是一种文件描述符。Socket也具有一个类似于打开文件的函数调用Socket(),该函数返回一个整型的Socket描述符,随后的连接建立、数据传输等操作都是通过该Socket实现的。

  • 下面用Socket实现一个windows下的c语言socket通信例子,这里我们客户端传递一个字符串,服务器端进行接收。

    123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159   【服务器端】#include "stdafx.h"#include <stdio.h>#include <winsock2.h>#include <winsock2.h>#define SERVER_PORT 5208 //侦听端口void main(){    WORD wVersionRequested;    WSADATA wsaData;    int ret, nLeft, length;    SOCKET sListen, sServer; //侦听套接字,连接套接字    struct sockaddr_in saServer, saClient; //地址信息       char *ptr;//用于遍历信息的指针       //WinSock初始化    wVersionRequested=MAKEWORD(2, 2); //希望使用的WinSock DLL 的版本    ret=WSAStartup(wVersionRequested, &wsaData);    if(ret!=0)    {        printf("WSAStartup() failed!\n");        return;    }    //创建Socket,使用TCP协议    sListen=socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);    if (sListen == INVALID_SOCKET)    {        WSACleanup();        printf("socket() faild!\n");        return;    }    //构建本地地址信息    saServer.sin_family = AF_INET; //地址家族    saServer.sin_port = htons(SERVER_PORT); //注意转化为网络字节序    saServer.sin_addr.S_un.S_addr = htonl(INADDR_ANY); //使用INADDR_ANY 指示任意地址      //绑定    ret = bind(sListen, (struct sockaddr *)&saServer, sizeof(saServer));    if (ret == SOCKET_ERROR)    {        printf("bind() faild! code:%d\n", WSAGetLastError());        closesocket(sListen); //关闭套接字        WSACleanup();        return;    }      //侦听连接请求    ret = listen(sListen, 5);    if (ret == SOCKET_ERROR)    {        printf("listen() faild! code:%d\n", WSAGetLastError());        closesocket(sListen); //关闭套接字        return;    }      printf("Waiting for client connecting!\n");    printf("Tips: Ctrl+c to quit!\n");    //阻塞等待接受客户端连接 while(1)//循环监听客户端,永远不停止,所以,在本项目中,我们没有心跳包。 {  length = sizeof(saClient);  sServer = accept(sListen, (struct sockaddr *)&saClient, &length);  if (sServer == INVALID_SOCKET)  {   printf("accept() faild! code:%d\n", WSAGetLastError());   closesocket(sListen); //关闭套接字   WSACleanup();   return;   

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式