免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1245 | 回复: 1
打印 上一主题 下一主题

各位大哥,求个代码 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2012-06-04 21:31 |只看该作者 |倒序浏览
C语言
服务器端:
想服务器端接受客户端发来的5个字符串后,C连接数据库增加到自己建的表里面

客户端:
读取5个字符串后发送给服务器端。

论坛徽章:
2
2015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:56:11
2 [报告]
发表于 2012-06-04 22:46 |只看该作者
不知道你要干嘛,没有装*nix,用winsock随手写了一个例子。自己按要求修改吧。是单线程的。
  1. /* rcvstr.c */

  2. #include <stdio.h>

  3. #include <winsock2.h>
  4. #pragma comment(lib, "ws2_32.lib")

  5. #define PORT            8888
  6. #define STRING_LEN        32

  7. struct pdu_struct
  8. {
  9.         char str[STRING_LEN];
  10. };

  11. int output_nstring(const char *s, int len)
  12. {
  13.         while (*s != '\0' && len-- > 0) {
  14.                 putchar(*s++);
  15.         }
  16.         return 0;
  17. }

  18. int input_nstring(char *s, int len)
  19. {
  20.         int c;
  21.         int i;

  22.         for (i = 0; i < len; ++i) {
  23.                 if ((c = getchar()) != EOF) {
  24.                         if (c == '\n') {
  25.                                 s[i] = '\0';
  26.                                 return i;
  27.                         }
  28.                         s[i] = c;
  29.                         continue;
  30.                 }
  31.                 break;
  32.         }
  33.         while ((c = getchar()) != EOF && c != '\n') {
  34.         }
  35.         return i;
  36. }

  37. int main(int argc, const char *argv[])
  38. {
  39.         struct pdu_struct pdu;
  40.         WSADATA wsadata;
  41.         SOCKET sockfd, sockfd_client;
  42.         struct sockaddr_in addr, addr_client;
  43.         int len;

  44.         if (WSAStartup(MAKEWORD(2, 0), &wsadata) == 0) {
  45.                 sockfd = socket(AF_INET, SOCK_STREAM, 0);
  46.                 if (sockfd != INVALID_SOCKET) {
  47.                         if (argc == 2 && strcmp(argv[1], "--server") == 0) {
  48.                                 ZeroMemory(&addr, sizeof(addr));
  49.                                 addr.sin_family = AF_INET;
  50.                                 addr.sin_port = htons(PORT);
  51.                                 if (bind(sockfd, (struct sockaddr *)&addr, sizeof(addr)) != SOCKET_ERROR) {
  52.                                         if (listen(sockfd, 5) != SOCKET_ERROR) {
  53.                                                 for (;;) {
  54.                                                         len = sizeof(addr_client);
  55.                                                         puts("wait for connection");
  56.                                                         sockfd_client = accept(sockfd, (struct sockaddr *)&addr_client, &len);
  57.                                                         if (sockfd_client != INVALID_SOCKET) {
  58.                                                                 printf("connection from %s:%u\n", inet_ntoa(addr_client.sin_addr), ntohs(addr_client.sin_port));
  59.                                                                 for (;;) {
  60.                                                                         puts("receiving data");
  61.                                                                         len = recv(sockfd_client, (char *)&pdu, sizeof(pdu), 0);
  62.                                                                         if (len == sizeof(pdu)) {
  63.                                                                                 output_nstring(pdu.str, STRING_LEN);
  64.                                                                                 putchar('\n');
  65.                                                                                 continue;
  66.                                                                         }
  67.                                                                         break;
  68.                                                                 }
  69.                                                                 puts("break connection");
  70.                                                                 shutdown(sockfd_client, SD_RECEIVE);
  71.                                                                 closesocket(sockfd_client);
  72.                                                                 continue;
  73.                                                         }
  74.                                                         break;
  75.                                                 }
  76.                                                 closesocket(sockfd);
  77.                                                 WSACleanup();
  78.                                                 return 0;
  79.                                         }
  80.                                 }
  81.                         }else {
  82.                                 ZeroMemory(&addr, sizeof(addr));
  83.                                 addr.sin_family = AF_INET;
  84.                                 addr.sin_port = htons(PORT);
  85.                                 addr.sin_addr.s_addr = inet_addr("127.0.0.1");
  86.                                 if (connect(sockfd, (struct sockaddr *)&addr, sizeof(addr)) != SOCKET_ERROR) {
  87.                                         printf("Please input string to send to sever. Empty line to exit.\n");
  88.                                         for (;;) {
  89.                                                 if (input_nstring(pdu.str, STRING_LEN) > 0) {
  90.                                                         if (send(sockfd, (char *)&pdu, sizeof(pdu), 0) == sizeof(pdu)) {
  91.                                                                 puts("send ok");
  92.                                                                 continue;
  93.                                                         }
  94.                                                 }
  95.                                                 break;
  96.                                         }
  97.                                         shutdown(sockfd, SD_SEND);
  98.                                         closesocket(sockfd);
  99.                                         WSACleanup();
  100.                                         return 0;
  101.                                 }
  102.                         }
  103.                         closesocket(sockfd);
  104.                 }
  105.                 WSACleanup();
  106.         }
  107.         return -1;
  108. }
复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP