23,114
社区成员
发帖
与我相关
我的任务
分享
#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);
}