日期:2014-05-16 浏览次数:20713 次
#include <stdio.h> #include <stdlib.h> #include <unistd.h> #include <sys/types.h> #include <sys/socket.h> #include <arpa/inet.h> #define MAX 100 void deal(char *src) { if (src == NULL) return ; for (; *src != '\0'; src++){ if (*src >= 'A' && *src <= 'Z'){ *src = *src - 'A' + 'a'; } } } int main() { struct sockaddr_in sin; struct sockaddr_in cin; int sockfd, cfd; socklen_t len; char buf[MAX]; char addr_p[INET_ADDRSTRLEN];//存储客户端地址的缓冲区 int port = 8000; int n;//读写字节数 //对结构体清空 bzero(&sin, sizeof(sin)); sin.sin_family = AF_INET;//ipv4 sin.sin_port = htons(port);//端口号转换为网络字节序 sin.sin_addr.s_addr = INADDR_ANY;//服务器接受任意地址 sockfd = socket(AF_INET, SOCK_STREAM, 0);//0表示使用默认的协议 bind(sockfd, (struct sockaddr *)&sin, sizeof(sin));//将地址和套接字绑定 listen(sockfd, 10);//监听,最多可以处理10个请求 printf("waiting...\n"); while (1){ //接受连接,返回新创建的socket描述符 cfd = accept(sockfd, (struct sockaddr *)&cin, &len); n = read(cfd, buf, MAX);//读取客户端传来的信息 inet_ntop(AF_INET, &cin.sin_addr, addr_p, sizeof(addr_p)); //将客户端地址转换为字符串 printf("client IP is %s,port is %d\n", addr_p, ntohs(cin.sin_port)); printf("content is : %s\n", buf); deal(buf); write(cfd, buf, n);//发给客户端 printf("after deal the content is : %s\n", buf); close(cfd);//通讯结束,准备下一次通信 } if (close(sockfd) == -1){ perror("fail to close"); exit(1); } exit(0); }
#include <stdio.h> #include <stdlib.h> #include <unistd.h> #include <string.h> #include <sys/types.h> #include <sys/socket.h> #include <arpa/inet.h> #define MAX 100 int main(int argc, char *argv[]) { struct sockaddr_in sin;//服务器地址 char buf[MAX]; int sockfd; int port = 8000; char *p = "test string";//默认字符串 char *str = p; if (argc > 1){ str = argv[1]; } bzero(&sin, sizeof(sin)); sin.sin_family = AF_INET; inet_pton(AF_INET, "192.168.1.1", &sin.sin_addr); //问题就在这里。当我把这个ip改为自己的网络ip,然后把客户端 //放到网络上的另一台主机上。让它来连接服务器。但是没反应 //不知道为啥 //这里的ip应该为服务器的网络ip。但没写上去。就写了个私有ip sin.sin_port = htons(port);//和服务器同样的端口号 sockfd = socket(AF_INET, SOCK_STREAM, 0); connect(sockfd, (struct sockaddr *)&sin, sizeof(sin)); //主动连接服务器 write(sockfd, str, strlen(str) + 1); //该串不包括'\0' //读取服务器程序发回的串,由于是同一台机器,不存在延时 //真正的网络环境,要处理延时 read(sockfd, buf, MAX); printf("recive form server : %s\n", buf); close(sockfd); exit(0); }