client.c

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <errno.h>
#include <sys/socket.h>
#include <arpa/inet.h>
#include <netinet/in.h>
#include <sys/types.h>
#include <unistd.h>
#include <time.h> #define maxn 101
/**
服务器端
1>建立一个基于TCP的流套接字描述符
2>将套接字描述符绑定到本地地址和本地端口上
3>监听客户端的请求
4>通过Accept接收客户端的请求
5>发送数据/接收数据
6>关闭套接字
客户端
1>与服务器端建立链接
2> 发送数据/接收数据
3>关闭套接字
**/
int main(int argc, char** argv)
{
int s_socket ;
//1>建立一个基于TCP的流套接字描述符
if((s_socket = socket(AF_INET, SOCK_STREAM, )) == -)
{
herror("socket");
exit(errno);
}
else
{
printf("socket create success!\n");
}
//端口号
unsigned int port;
if(argv[]) {
port = atoi(argv[]);
}
else {
port = ;
}
//2>将套接字描述符绑定到本地地址和本地端口上
struct sockaddr_in addport;
bzero(&addport, sizeof(addport));
addport.sin_family = AF_INET;
//addport.sin_addr.s_addr = inet_addr(argv[1]);
addport.sin_port = htons(port);
if(inet_aton(argv[], (struct in_addr*)&addport.sin_addr.s_addr) == -)
{
herror("port");
exit(errno);
}
else
{
printf("IP and port create success!\n");
}
//建立链接
if(connect(s_socket, (struct sockaddr*)&addport, sizeof(addport)) == -)
{
herror("connect");
exit(errno);
}
else
{
printf("connect success\n");
}
//3>监听客户端的请求
char buf[maxn];
char buf1[maxn];
int flag = ;
while()
{
//接收信息
flag = ;
bzero(buf, maxn);
int len;
len = recv(s_socket, buf, maxn, );
if(len > )
{
printf("服务器发来的信息是: %s\n", buf);
}
else
{
if(len == )
{
printf("server is closed!\n");
flag = ;
break;
}
else if(len == -)
{
printf("receive message failure!");
}
}
loop:
if(flag == ) break;
bzero(buf, maxn);
printf("请输入要发送的信息:");
fgets(buf, maxn, stdin);
if(strncasecmp(buf, "exit", ) == )
{
printf("聊天中止\n");
break;
}
if(strncmp(buf, "\n", ) == )
{
printf("空字符\n");
continue;
}
int L_len = strlen(buf);
if(buf[L_len - ] == '\n')
{
len = send(s_socket, buf, L_len - , );
}
else
{
len = send(s_socket, buf, L_len, );
}
if(len > )
{
printf("send message success!\n");
}
else
{
printf("send message failure!\n");
break;
}
}
close(s_socket);
return ;
}

server.c

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <errno.h>
#include <sys/socket.h>
#include <arpa/inet.h>
#include <netinet/in.h>
#include <sys/types.h>
#include <unistd.h>
#include <time.h> #define maxn 101
/**
服务器端
1>建立一个基于TCP的流套接字描述符
2>将套接字描述符绑定到本地地址和本地端口上
3>监听客户端的请求
4>通过Accept接收客户端的请求
5>发送数据/接收数据
6>关闭套接字
客户端
1>与服务器端建立链接
2> 发送数据/接收数据
3>关闭套接字
**/
int main(int argc, char** argv)
{
int s_socket, sock_port ;
//1>建立一个基于TCP的流套接字描述符
if((s_socket = socket(AF_INET, SOCK_STREAM, )) == -)
{
herror("socket");
exit(errno);
}
else
{
printf("socket create success!\n");
}
//端口号
unsigned int port;
if(argv[]) {
port = atoi(argv[]);
}
else {
port = ;
}
if(argv[])
{
sock_port = atoi(argv[]);
}
else
{
sock_port = ;
}
//2>将套接字描述符绑定到本地地址和本地端口上
struct sockaddr_in c_addport, s_addport;
bzero(&s_addport, sizeof(s_addport));
s_addport.sin_family = AF_INET;
//s_addport.sin_addr.s_addr = inet_addr(argv[1]);
s_addport.sin_port = htons(port);
if(argv[])
{
s_addport.sin_addr.s_addr = inet_addr(argv[]);
}
else
{
s_addport.sin_addr.s_addr = INADDR_ANY;
}
if((bind(s_socket, (struct sockaddr*) &s_addport, sizeof(struct sockaddr))) == -) {
perror("bind");
exit(errno);
}
else {
printf("bind success!\n");
}
//3>监听客户端的请求
if(listen(s_socket, sock_port) == -)
{
herror("listen");
exit(errno);
}
else
{
printf("server is listening!\n");
}
while()
{
int flag;
socklen_t len;
len = sizeof(struct sockaddr);
flag = accept(s_socket, (struct sockaddr*)&c_addport, &len);
if(flag == -)
{
herror("accept");
exit(errno);
}
else
{
printf("Accept success!\n");
printf("现在监听的客户端IP是 :%s端口是%d\n", inet_ntoa(c_addport.sin_addr), ntohl(c_addport.sin_port));
}
char buf[maxn];
while()
{
//发送消息
loop:
bzero(buf, maxn);
printf("请输入要发送的信息:");
fgets(buf, maxn, stdin);
int L_len = strlen(buf);
int Index ;
if(strncasecmp(buf, "exit", ) == )
{
printf("chatting be ended !\n");
break;
}
if(strcmp(buf, "\n") == )
{
printf("空字符\n");
goto loop;
}
if(buf[L_len - ] == '\n')
{
Index = send(flag, buf, L_len - , );
}
else
{
Index = send(flag, buf, L_len, );
}
if(Index == -)
{
printf("send message failure!");
}
else
{
printf("send message success\n");
}
//接收消息
bzero(buf, maxn);
int LL;
LL = recv(flag, buf, maxn, );
if(LL > )
{
printf("从客户端接收的信息是%s\n", buf);
}
else
{
if(LL < )
{
printf("Receive message failure!\n");
}
else
{
printf("客户端退出,聊天中止\n");
break;
}
}
}
close(flag);
printf("是否结束进程?Y->是:N->否");
bzero(buf, maxn);
fgets(buf, maxn, stdin);
if(strncasecmp(buf, "Y", ) == )
{
printf("结束进程\n");
break;
}
else {
printf("waiting ..........\n");
}
}
close(s_socket);
return ;
}

应用少.....更新中。。。。。。

最新文章

  1. golang 使用 iota
  2. tornado中将cookie值设置为json字符串
  3. Firefly Http通信简单介绍
  4. angularjs编码实践
  5. linux 定时执行任务
  6. Design Principles and Design Patterns
  7. MyBatis探究-----配置数据源的几种方式
  8. 前端上传图片回显并用base64编码,后端做解码储存,存储图片路径在.properties文件中配置(以上传身份证照片为例)
  9. 源码分析之groupcache之consistenthash
  10. [转] XEN, KVM, Libvirt and IPTables
  11. Android 线程交互
  12. HTML常用标签2
  13. .Net 获取日期所属于一年中的第几周
  14. Service Fabric下删除实例并注销应用
  15. Exp1 PC平台逆向破解(5)M
  16. 【LOJ 2542】【PKUWC2018】 随机游走(最值反演 + 树上期望dp)
  17. HDU.2612 Find a way (BFS)
  18. Java基础--NIO
  19. 181. Flip Bits【LintCode, by java】
  20. [NOI2008] [bzoj1061] 志愿者招募

热门文章

  1. 第十一次ScrumMeeting会议
  2. .Net 面试总结
  3. iOS版微信开发小结(微信支付,APP跳转微信公众号)
  4. web相关基础知识4
  5. PAT 1005 继续(3n+1)猜想
  6. koajs框架学习
  7. Hibernate常用方法之_修改
  8. P1118 [USACO06FEB]数字三角形`Backward Digit Su`…
  9. 雅礼集训 Day3 T3 w 解题报告
  10. rematch的基本用法